python数学建模学习

Last updated on 4 months ago

python必备库

  • numpy:

    科学计算的基础包

  • pandas:

    建立在 NumPy 数组之上的数据分析工具

  • matplotlib:

    用于绘制各种类型图表

评价决策类

通过对比多个指标,做出适合的决策,比如买衣服,指标可能会有价格、颜色、样式设计等,这些指标需要进行一定的处理才能使用

归一化处理

当有多个指标时,每个指标的数量级不同(比如明星的粉丝数几万和作品数只有十几个),如果直接将指标相加进行比较容易忽略数量级较小的指标。

让指标处于同一数量级,且保证在同一指标下差距不变,就是归一化处理

比如:对于三种决策,同一指标下的指标数组[a,b,c],归一化处理得到[a/(a+b+c), b/(a+b+c), c/(a+b+c)]

每个指标就统一为了(0,1)之间

每个指标的重要性是不同的,需要根据情况加上权重

比如:每个决策有2个指标,1个更重要,那么可以把他权重设为0.2,另一个权重为0.1,在归一化处理的时候乘以权重

两两分析法

可以使用两两比较法确定指标重要性,绘制一个表格,行列为各个指标,表格元素为两个指标的重要性之比且比值满足下表

尺度 含义
1 A比B影响相同
3 A比B影响稍强
5 A比B影响强
7 A比B影响明显的强
9 A比B影响绝对的强
2,4,6,8 处于上述比值之间
1,1/2… 与上述互反

层次分析法

简称AHP,是对一些较为复杂、模糊的问题作出决策的简易方法,它特别适合难以完全定量分析的问题

层次分析法模型

在应用AHP分析决策问题时,首先要把问题条理化、层次化,构造出一个有层次的结构模型

  • 目标层:只有一个元素,一般是分析问题的预定目标或理想结果
  • 准则层:包含了目标所涉及的中间环节,可以包含若干个层次,包括所需考虑的准则、子准则
  • 方案层:包含了为实现目标可供选择的各种措施、决策方案

一致矩阵

通过两两分析法可以获得一个矩阵,如果该矩阵合理则称为一致性矩阵,比如a12=2:1,a13=5,那么t应该有:a23=a21*a13=5/2,但由于在比较时是两两比较的,就可能出现不一致的情况。所以矩阵构建后需要进行一致性检验

一致性检验

一致性矩阵有两个性质:

  • A的秩1,A的唯一非零特征根为n
  • A的任一列向量都是对于特征根n

一致性的检验方法:

  1. A的秩1,A的唯一非零特征值为n
  2. A的任一列向量都是对于特征值n的特征向量
  3. A不为一致矩阵时,其最大特征值kmax>n,且相差越大,其不一致程度越大

计算一致性指标公式:
$$
CI=\frac{\lambda_{\max}-n}{n-1},:CI=\begin{cases}0\text{,有完全一致性}\\text{接近}0\text{,满意的一致性}\\text{越大,一致性越差}\end{cases}
$$
为了衡量CI的大小,引入了随机一致性指标RI,常用的RI如下表

n 1 2 3 4 5 6 7 8 9 10 11
RI 0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51

定义一致性比例:
$$
CR=\frac{CI}{RI}
$$
如果CR<0.1,则判断一致性可以接受

一致性矩阵权重计算

  • 对于一致性矩阵,可以将指标归一化处理得出权重,比如:

    a b
    a 1 2
    b 1/2 1

    那么a的权重即为1/(1+0.5),b的权重为0.5/(1+0.5)

  • 对于非一致性矩阵,由于各列不成比例,所以需要计算每一列的权重,算出算术平均值作为最后的权重,如:

    a b c
    a 1 2 5
    b 1/2 1 2
    c 1/5 1/2 1

    对于第一列:a1=1/(1+0.5+0.25),b1=0.5/(1+0.5+0.25),c1=0.25/(1+0.5+0.25)

    对于第二列:a2=2/(2+1+0.5),b2=1/(2+1+0.5),c2=0.5/(2+1+0.5)

    对于第三列:……

    所以a的权重=(a1+a2+a3)/3,b的权重……

  • 通用方法:特征值求权重

    当矩阵通过一致性检验后,算出矩阵的最大特征值对应的特征向量,对该特征向量进行归一化处理

层次分析法PYTHON

一致性检验

1
2
3
4
5
6
7
8
import numpy as np
# 定义矩阵
A = np.array([[1,2,3,5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]])
eig_val, eig_vec = np.linalg.eig(A) # 求出特征值和特征向量


n = A.shape[0] # 获取A的行,0改为1则是A的列,shape是获取形状信息
n

​ 4

1
2
3
4
5
6
7
8
9
10
11
12
13
Max_eig = max(eig_val)  # 求出最大特征值
CI = (Max_eig - n) / (n-1)
RI = [0, 0.0001, 0.52, 0.89, 1.12, 1.26, 1.36, 1.41, 1.46, 1.49, 1.52, 1.54, 1.56, 1.58, 1.59] # 随机一致性指标,最大支持15

CR = CI / RI[n-1]

print("一致性指标CI=",CI)
print("一致性比例CR=",CR)

if CR < 0.10:
print("一致性可接受")
else:
print("一致性不可接受")

​ 一致性指标CI= (0.03761001273071566+0j)
​ 一致性比例CR= (0.04225844127046704+0j)
​ 一致性可接受

三种方法求权重

  1. 算数平均法求权重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np

# 定义判断矩阵A
A = np.array([[1,2,3,5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]])

# 计算每列的和
# 通过np.sum可以计算一维数组中所有元素的和
# 还可以通过 axis 参数来计算多维数组的某个维度上的元素总和,例如在二维数组中,axis=0 表示按列计算总和,1 表示按行计算总和
ASum = np.sum(A, axis=0)

# 获取A的行和列
n = A.shape[0]

# 归一化,二维数组除以一维数组会自动将一维数组扩展,然后逐元素进行出除法运算
Stand_A = A / ASum

# 各列相加到同一行
ASumr = np.sum(Stand_A, axis=1)

# 计算权重向量
weights = ASumr / n

print(weights)

​ [0.48885991 0.18192996 0.2318927 0.09731744]

  1. 几何平均法求权重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np

# 定义判断矩阵A
A = np.array([[1,2,3,5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]])

# 获取A的行和列
n = A.shape[0]

# 将A中每一行元素相乘得到一列向量
# np.prod 函数可以计算一维数组中所有元素的乘积
# 还可以通过 axis 参数来计算多维数组的某个维度上的元素总和,例如在二维数组中,axis=0 表示按列计算乘积,1 表示按行计算乘积
prod_A = np.prod(A, axis=1)


# 将新的向量的每个分量开n次方等价求1/n次方
# np.power 用于对数组中的元素进行幂运算
# np.power(a, b) 表示对a中的所有元素进行b指数运算
prod_n_A = np.power(prod_A, 1/n)

# 归一化处理
re_prod_A = prod_n_A / np.sum(prod_n_A)

print(re_prod_A)

​ [0.49492567 0.17782883 0.22724501 0.1000005 ]

  1. 特征值求权重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

# 定义判断矩阵A
A = np.array([[1,2,3,5], [1/2, 1, 1/2, 2], [1/3, 2, 1, 2], [1/5, 1/2, 1/2, 1]])

# 获取A的行和列
n = A.shape[0]

# 获取特征值和特征向量
eig_val, eig_vec = np.linalg.eig(A)

# 找出最大特征值的索引
max_index = np.argmax(eig_val)

# # 找出对应的特征向量
max_vec = eig_vec[:, max_index]

# # 对特征向量进行归一化处理
weights = max_vec / np.sum(max_vec)

print(weights)

[0.4933895 +0.j 0.17884562+0.j 0.230339 +0.j 0.09742588+0.j]

Topsis算法

可以翻译为逼近理想解排序法,也常简称为优劣解距离法,简单而言就是考虑方案距离最优方案(各个属性值都达到备选方案中最好的值)、最劣方案的距离(各个属性值都达到备选方案中最坏的值)。

将备选方案与理想解、负理想解对比,若其中一个最接近理想解同时又远离负理想解,则该方案是备选方案中最好的方案。

Topsis模型

就是计算出各方案与理想解的距离,也就是贴近度,贴近度取值为0-1,越接近1表示越接近理想解,反之则接近负理想解

它的基本步骤如下:

  • 原始矩阵正向化

    对于不同指标,最优解有多种可能,最大的、最小的、接近某个值的、处于某个区间的

    正向化就是将各指标与最优解的距离转化为极大型指标,极大型指标越大表示越接近最优解

  • 正向矩阵标准化

    主要目的是去除量纲的影响,保证不同指标出去同一数量级,且数据大小排序不变

  • 计算得分并归一化
    $$
    S_i=\frac{D_i^-}{D_i^++D_i^-}\quad\text{其中}S_i\text{为得分,}D_i^+\text{为评价对象与最大值的距离,}D_i^-\text{为评价对象与最小值的距离}
    $$

原始矩阵正向化

正向化就是将所有指标类型统一转化为极大型指标(极大型指标即越大越好的指标),其他指标类型有:极小型、中间型、区间型,他们转化为极大型的公式如下:

  • 极大型指标:、

    不需要转换

  • 极小型指标:
    $$
    \hat{x}=max-x\text{,}\hat{x}\text{为转化后指标,}max\text{为指标最大值,}x\text{为指标值}
    $$

  • 中间型指标:
    $$
    {x_{i}}\text{是一组中间型序列,最优值是}x_{best}\M=max{|x_{i}-x_{best}|}, \hat{x}{i}=1-\frac{|x{i}-x_{best}|}{M}
    $$
    比如指标xi=[5,8,10],则:

    最优解就是xbest=7,

    M=max{|5-7|,|8-7|,|10-7|}=3,

    转换后的指标分别是:1-|5-7|/3, 1-|8-7|/3, 1-|10-7|/3,

    易得在三个值中,8最接近最优7

  • 区间型指标:
    $$
    {x_{i}}\text{是一组区间型序列,最佳区间为}\left[a,b\right],\text{ 正向化公式如下}\M=max{a-min{x_{i}}, max{x_{i}}-b}, \widetilde{x}{i}=\begin{cases}1-\frac{a-x{i}}{M}, x_{i}<a\1, a\leq x_{i}\leq b\1-\frac{x_{i}-b}{M}, x_{i}>b\end{cases}
    $$

正向矩阵标准化

标准化的目的是消除不同指标量纲的影响
$$
\begin{aligned}
&X=\begin{bmatrix}x_{11}&\cdots&x_{1m}\\vdots&\ddots&\vdots\x_{n1}&\cdots&x_{nm}\end{bmatrix} \
&\text{那么,对其标准化的矩阵记为}Z\text{,}Z\text{中的每一个元素}: \
&z_{ij}=\frac{x_{ij}}{\sqrt{\Sigma_{i=1}^{n}x_{ij}^{2}}}(\text{每一个元素}/\sqrt{\text{其所在列的元素的平方和}})
\end{aligned}
$$
标准化后,还需要给不同指标加上权重

计算得分并归一化

  • $$
    定义最大值 ( Z^+ = (Z_1^+, Z_2^+, …, Z_m^+) = ( \max{z_{11}, z_{21}, …, z_{n1}}, \max{z_{12}, z_{22}, …, z_{n2}}, …, \max{z_{1m}, z_{2m}, …, z_{nm}} )
    $$

  • $$
    定义最小值 Z^- = (Z_1^-, Z_2^-, …, Z_m^-) = ( \min{z_{11}, z_{21}, …, z_{n1}}, \min{z_{12}, z_{22}, …, z_{n2}}, …, \min{z_{1m}, z_{2m}, …, z_{nm}})
    $$

  • $$
    定义第 i (i = 1, 2, …, n)个评价对象与最大值的距离D_i^+ = \sqrt{\sum_{j=1}^m (Z_j^+ - z_{ij})^2}
    $$

  • $$
    定义第i(i = 1, 2, …, n) 个评价对象与最小值的距离D_i^- = \sqrt{\sum_{j=1}^m (Z_j^- - z_{ij})^2}
    $$

  • $$
    那么,我们可以计算出第i( i = 1, 2, …, n) 个评价对象未归一化的得分:S_i = \frac{D_i^-}{D_i^+ + D_i^-}
    $$

  • $$
    很明显0 \leq S_i \leq 1,且S_i越大D_i^- 越小,即越接近最大值
    $$

  • $$
    \text{我们可以将得分归一化并换成百分制:}\widetilde{S}\mathrm{i}=\frac{S_\mathrm{i}}{\sum{i=1}^nS_\mathrm{i}}\times\underline{1}00
    $$

python代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np

print("输入参评数目:")
n = int(input())
print("输入指标数目")
m = int(input())
print("输入矩阵类型,用空格分隔:1极大,2极小,3中间,4区间")
kind = input().split(" ")
print("输入矩阵")
A = np.zeros(shape=(n,m)) # 初始化n行m列的零矩阵A
for i in range(n):
A[i] = input().split(" ")
A[i] = list(map(float, A[i])) # 将接受的到的字符串转为浮点数列表
print("输入矩阵为,\n{}", format(A))

​ 输入参评数目:3
​ 输入指标数目:4
​ 输入矩阵类型,用空格分隔:1极大,2极小,3中间,4区间
​ 1 2 3 4
​ 输入矩阵
​ 输入矩阵为,
​ {} [[ 9. 10. 175. 120.]
​ [ 8. 7. 164. 80.]
​ [ 6. 3. 157. 90.]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 极小指标转极大指标函数
def minTomax(maxx, x):
x = list(x) # 将输入的指标数据转化为列表
ans = [[maxx-e] for e in x] # 计算最大值与每个指标值的差,并放入新列表中
return np.array(ans) # 将列表转换为numpy数组并返回


# 中间型转极大指标函数
def midTomax(bestx, x):
x = list(x)
h = [abs(e-bestx) for e in x]
M = max(h)
if M == 0:
M = 1 # 防止最大差值为0的情况
ans = [[(1-e/M)] for e in h] # 计算每个差值占最大差值的比例,并从1中减去,得到新指标值
return np.array(ans)


# 区间型转极大指标函数
def regTomax(lowx, hightx, x):
x = list(x)
M = max(lowx-min(x), max(x)-hightx) # 计算指标值超出区间的最大距离
if M == 0:
M = 1 # 防止最大距离为0的情况
ans = []
for i in range(len(x)):
if x[i]<lowx:
ans.append([1-(lowx-x[i])/M])
elif x[i]>hightx:
ans.append([(1-(x[i]-hightx)/M)])
else:
ans.append([1])
return np.array(ans)
# 统一指标类型,将所有指标转化为极大型指标
X = np.zeros(shape=(n,1))
for i in range(m):
if kind[i]=="1": # 极大型
v = np.array(A[:, i])
elif kind[i]=="2": # 极小型
maxA = max(A[:, i])
v = minTomax(maxA, A[:, i])
elif kind[i]=="3": # 中间型
print("请输入最优值:")
bestA = eval(input())
v = midTomax(bestA, A[:, i])
elif kind[i]=="4": # 区间型
print("请输入区间[a,b]值a:")
lowA = eval(input())
print("请输入区间[a,b]值b:")
hightA = eval(input())
v = regTomax(lowA, hightA, A[:, i])
if i==0:
X = v.reshape(-1, 1) # 如果是第一个指标,直接替换X数组
else:
X = np.hstack([X, v.reshape(-1, 1)]) # 如果不是第一个指标,则将新指标拼接到X数组上
print("统一指标后矩阵为,\n{}", format(X))

​ 请输入最优值:
​ 请输入区间[a,b]值a:
​ 请输入区间[a,b]值b:
​ 统一指标后矩阵为,
​ {} [[9. 0. 0. 0. ]
​ [8. 3. 0.9 0.5]
​ [6. 7. 0.2 1. ]]

1
2
3
4
5
# 对同一指标后的矩阵X进行标准化处理
X = X.astype('float') # 确保X矩阵的数据类型为浮点数
for j in range(m):
X[:, j] = X[:, j]/np.sqrt(sum(X[:, j]**2)) # 对每一列进行归一化处理
print("标准化矩阵为:\n {}".format(X))

​ 标准化矩阵为:
​ [[0.66896473 0. 0. 0. ]
​ [0.59463532 0.3939193 0.97618706 0.4472136 ]
​ [0.44597649 0.91914503 0.21693046 0.89442719]]

1
2
3
4
5
6
7
8
9
# 最大值最小值距离的计算
x_max = np.max(X, axis=0) # 计算标准化矩阵每列的最大值
x_min = np.min(X, axis=0) # 计算标准化矩阵每列的最小值
d_z = np.sqrt(np.sum(np.square((X - np.tile(x_max, (n, 1)))), axis=1)) # 计算每个参评对象与最优情况的距离d+
d_f = np.sqrt(np.sum(np.square((X - np.tile(x_min, (n,1)))), axis=1)) # 计算每个参评对象与最劣情况的距离d-
print("每个指标的最大值:", x_max)
print("每个指标的最小值:", x_min)
print("d+向量:", d_z)
print("d-向量:", d_f)

​ 每个指标的最大值: [0.66896473 0.91914503 0.97618706 0.89442719]
​ 每个指标的最小值: [0.44597649 0. 0. 0. ]
​ d+向量: [1.61175952 0.69382053 0.79132442]
​ d-向量: [0.22298824 1.15334862 1.30072534]

1
2
3
4
5
# 计算每个参评对象的得分排名
s = d_f/(d_z+d_f)
Score = 100*s/sum(s) # 得分转百分制
for i in range(len(Score)):
print(f"第{i+1}个标准化后百分制得分为:{Score[i]}")

​ 第1个标准化后百分制得分为:8.886366735657832
​ 第2个标准化后百分制得分为:45.653341055701134
​ 第3个标准化后百分制得分为:45.46029220864103

熵权算法

熵是系统无序/混乱程序的一个度量,可以用来衡量指标的离散程度,如果某项指标的值全部相等,则在评价中不起作用,权重也就是变小

熵权法是一种客观的赋权方法,它可以靠数据本身得出权重

指标的变异程度越小,所反映的信息就越少,对用的权值也应该越低

基本步骤

  • 矩阵正向化

    和topsis一样

  • 数据标准化
    $$
    \text{对标准化的矩阵记为}Z\text{,则 z}{ij}=\frac{x{ij}}{\sqrt{\sum_{i=1}^nx_{ij}^2}}\quad\text{如果}x_{ij}\text{存在负数,则标准矩阵}\quad\tilde{Z}=\frac{x-min{x_{1j},x_{2j},…,x_{nj}}}{max{x_{1j},x_{2j},…,x_{nj}}-min{x_{1j},x_{2j},…,x_{nj}}}
    $$

  • 计算概率矩阵P
    $$
    \text{计算第 j项指标下第 i个样本所占的比重 }p_{ij}=\frac{\tilde{z}{ij}}{\sum{i=1}^{n}\tilde{z}_{ij}}
    $$

  • 计算熵权
    $$
    e_j=-\frac{1}{\ln n}\sum_{i=1}^np_{ij}\ln(p_{ij})(j=1,2,…,m)\quad d_j=1-e_j\quad W_j=\frac{a_j}{\sum_{j=1}^md_j}
    $$

python实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

# 定义一个对数函数,用于处理输入数组中的0元素
def mylog(p):
n = len(p) # 获取向量p的长度
lnp = np.zeros(n) # 创建一个长度n,元素为0的新数组lnp
for i in range(n): # 遍历向量的每个元素
if p[i] == 0:
lnp[i] = 0 # 在lnp中设置为0,因为log(0)未定义,这里规定为0
else:
lnp[i] = np.log(p[i]) # 不为0则计算后存入lnp
return lnp


# 定义一个指标矩阵X
X = np.array([[9,0,0,0], [8,3,0.9,0.5], [6,7,0.2,1]])

# 对矩阵X进行标准化,得到标准化矩阵Z
Z = X / np.sqrt(np.sum(X*X, axis=0))

print("标准化矩阵Z为:{}".format(Z))

​ 标准化矩阵Z为:[[0.66896473 0. 0. 0. ]
​ [0.59463532 0.3939193 0.97618706 0.4472136 ]
​ [0.44597649 0.91914503 0.21693046 0.89442719]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 计算熵权所需的变量和矩阵初始化
n, m = Z.shape # 获取Z的行数和列数
D = np.zeros(m) # 初始化一个长度m的数组D,用于保存每个指标的信息效用值


# 计算每个指标的信息效用值
for i in range(m): # 遍历Z的每一列
x = Z[:,i] # 获取Z的第i列
p = x / np.sum(x) # 对第i个指标归一化,得到概率分布p
# 计算对数
e = -np.sum(p * mylog(p)) / np.log(n) # 根据熵的定义计算第i个指标的信息熵e
D[i] = 1 - e # 根据信息效用值的定义计算D[i]

# 根据信息效用值计算各指标的权重
W = D / np.sum(D) # 将信息效用值D归一化,得到各指标的权重W

print("权重W=")
print(W)

​ 权重W=
​ [-0.28664984 0.12885848 0.45522308 0.70256829]

模糊综合评价

对于性别、身高、体重可以很容易的得到答案,这些是确定性概念

但对于胖瘦美丑这些就不好确定了,多胖算胖,怎么样算好看,这些就是模糊性概念

模糊集合和隶属函数

  • 模糊集合:

    用来描述模糊性概念的集合(美丑高低胖瘦)

  • 隶属函数:

    模糊集合用隶属函数来刻画,确定X上的一个模糊集合A,uA叫做A的隶属函数,uA(x)叫做x对模糊集A的隶属度

举个例子,模糊集合A=“年轻”,X=(0,150)表示年龄的集合

定义隶属函数
$$
\mu_A\left(x\right)=\begin{cases}1,0<x<20\\frac{40-x}{20},20\leq x\leq40\0,40<x<150\end{cases}
$$
意思是:小于20岁必定属于年轻;处于20到40之间的,随着年龄加大,与模糊集合A的隶属度越来越低,其中30岁为50%最为模糊;大于40则一定不属于年轻

  • 模糊集合的表示方式:

    1. zadeh表示法
      $$
      A=\sum_{i=1}^n\frac{\mu_A\left(i\right)}{x_i}=\frac{\mu_A\left(x_1\right)}{x_1}+\frac{\mu_A\left(x_2\right)}{x_2}+\cdots+\frac{\mu_A\left(x_n\right)}{x_n}\
      \text{注:“}\Sigma\text{”和“}+\text{”不是求和的意思,只是概括集合的记号}\\frac{\mu_A(i)}{x_i}\text{也不是分数,它表示点}x_i\text{对模糊集A的隶属度是}\mu_A(x)
      $$

    2. 序偶表示法
      $$
      A={(x_1,\mu_A(x_1)),(x_2,\mu_A(x_2)),…,(x_n,\mu_A(x_n))}
      $$

    3. 向量表示法
      $$
      A=\begin{pmatrix}\mu_A(x_1),\mu_A(x_2),…,\mu_A(x_n)\end{pmatrix}
      $$

    4. 当X为无限集时,X上的模糊集A可以写成
      $$
      A=\int\limits_{x\in X}\frac{\mu_A(x)}x\quad {注:“ \int ”不是积分的意思,}\frac{\mu_A(x_i)}x{也不是分数}
      $$

  • 隶属函数的确定:

    1. 模糊统计法:

      找多个人对同一个模糊概念进行描述,用隶属频率去定义隶属度。

      例如:30岁相对于年轻的隶属度,询问n个人,其中m个人认为30岁属于年轻,则隶属度为m/n

    2. 借助已有的客观尺度:

      某些模糊概念,可以用已有的指标去衡量隶属度。

      例如:小康家庭,可以用“恩格尔系数(食品支出/总支出)”去衡量,所以“1-恩格尔系数”看成隶属度

    3. 指派法:

      主观性较强,在确定模糊集合的所属分类后,给它指派一个隶属函数,指派的隶属函数可以在常用的模糊分布中找

评价问题

在模糊综合评价中,引入三个集合:

  1. 因素集(评价指标集)U
  2. 评语集(评价的结果)V
  3. 权重集(指标的权重)A

例如:评价一名学生的表现

U={专业排名,课外实践,志愿服务,竞赛成绩}

V={优,良,差}

A={0.4,0.2,0.1,0.3}

一级模糊综合评价

  1. 确定因素集U

  2. 确定评语集V

  3. 确定各因素权重A

  4. 确定模糊综合判断矩阵R

    矩阵R每一行代表一个因素,行内的各个元素表示该因素对各个评语的隶属度

    比如:

    员工的综合评分,因素可以是政治表现,工作态度,评语是优良差,那么:

    第一行【0.1 0.5 0.4】表示则政治表现对于优的隶属度为0.1,良的隶属度是0.5,差的隶属度是0.4

    第二行【…】表示工作态度对于……

  5. 进行矩阵合成运算
    $$
    B=A*R
    $$
    得到一个行向量,这个行向量就是该员工对于评语集的隶属度,最大隶属度对应的评语就是该员工的评价。

多层次模糊综合评价

  1. 给出被评价的对象集合X

  2. 确定因素(指标)集U,如果有较多因素,可以将因素按某些属性分为s个子集,Ui表示第i个子集,u^(i)^1表示第i个子集中的第1个元素,这些子集满足以下条件:

    1. 子集个数为s
    2. 所有子集取并集,为因素集U
    3. 任意两个子集取交集,为空集
  3. 确定评语集V

  4. 由子集Ui与评语集V获得评价矩阵Ri

  5. 对每一个Ui,分别做出综合决策:

    设Ui中的各个因素权重分配为Ai,可得到一级评价向量:
    $$
    B_{i}=A_{i}\times R_{i}
    $$

  6. U的单元素判断矩阵为:
    $$
    R=\begin{bmatrix}B_1\B_2\\vdots\B_s\end{bmatrix}=\begin{bmatrix}b_{11}&b_{12}&\cdots&b_{1m}\\vdots&\vdots&\vdots&\vdots\\vdots&\vdots&\vdots&\vdots\b_{s1}&b_{s2}&\cdots&b_{sm}\end{bmatrix}
    $$
    每个Ui作为U的一部分,反映了U的某种属性,可以按重要性给出权重分配A

    接着得到二级模糊综合评价
    $$
    B=A \times R
    $$
    若Ui仍有较多因素,可以进行在划分,得到更高级的模型,计算方式与二级一致,从最低级算起

模糊综合评价PYTHON实现

一级模糊综合评价

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np

# 一级模糊综合评价
# 各因素的单元素评价矩阵
R23 = np.array(
[
[0.18, 0.14, 0.18, 0.14, 0.13, 0.23],
[0.15, 0.20, 0.15, 0.25, 0.10, 0.15],
[0.25, 0.12, 0.13, 0.12, 0.18, 0.20],
[0.16, 0.15, 0.21, 0.11, 0.20, 0.17],
[0.23, 0.18, 0.17, 0.16, 0.15, 0.11],
[0.19, 0.13, 0.12, 0.12, 0.11, 0.33],
[0.17, 0.16, 0.15, 0.08, 0.25, 0.19],
]
)

# 权重分配为
A23 = np.array([0.20, 0.15, 0.10, 0.10, 0.20, 0.15, 0.10])
# 评价结果
# np.dot 函数用于计算两个数组的点积,对于一维数组,计算的是两个数组的内积
# 对于二维数组,计算的是矩阵乘法
B23 = np.dot(A23, R23)

print(B23)

[0.191 0.1565 0.1595 0.1465 0.1505 0.196 ]

多级模糊评价

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 产品情况的二级评判如下
R1 = np.array(
[
[0.12, 0.18, 0.17, 0.23, 0.13, 0.17],
[0.15, 0.13, 0.18, 0.25, 0.12, 0.17],
[0.14, 0.13, 0.16, 0.18, 0.20, 0.19],
[0.12, 0.14, 0.15, 0.17, 0.19, 0.23],
[0.16, 0.12, 0.13, 0.25, 0.18, 0.16],
]
)
A1 = np.array([0.15, 0.40, 0.25, 0.10, 0.10])
B1 = np.dot(A1, R1)

# 销售能里二级评价如下
R2 = np.array(
[
[0.13, 0.15, 0.14, 0.18, 0.16, 0.25],
[0.12, 0.16, 0.13, 0.17, 0.19, 0.23],
B23,
[0.14, 0.13, 0.15, 0.16, 0.18, 0.24],
[0.16, 0.15, 0.15, 0.17, 0.18, 0.19],
]
)
A2 = np.array([0.2, 0.15, 0.25, 0.25, 0.15])
B2 = np.dot(A2, R2)

# 市场需求的二级评价
R3 = np.array(
[[0.15, 0.14, 0.13, 0.18, 0.14, 0.26], [0.16, 0.15, 0.18, 0.14, 0.16, 0.21]]
)
A3 = np.array([0.55, 0.45])
B3 = np.dot(A3, R3)


# 三级模糊综合评判
R = np.array([B1, B2, B3])
A = np.array([0.4, 0.3, 0.3])
B = np.dot(A, R)

print(B)

[0.147975 0.1427875 0.1561625 0.1862875 0.1575375 0.20985 ]

控制预测类

线性回归

线性回归指的是确定两种或两种以上变量间互相依赖的定量关系。根据涉及变量的多少,分为一元回归多元回归;按照因变量的多少,可分为简单回归多重回归分析;按照自变量和因变量之间的关系类型,可以分为线性回归非线性回归。所以回归分析一般包括四个方向:一元线性回归分析、多元线性回归分析、一元非线性回归分析、多元非线性回归分析

回归分析的一般步骤为:

  • 确定回归方程中的解释变量和被解释变量(自变量因变量)
  • 确定回归模型、建立回归方程
  • 对回归方程进行检验
  • 利用回归方程进行预测

回归模型基本概念:

  • 自变量:预测或解释因变量和一个或多个变量,用x表示
  • 因变量:被预测或解释的变量,用y表示
  • 描述y如何依赖于x和误差项€的方程称为回归模型

以一元线性回归分析为例:
$$
\begin{aligned}
&\bullet\text{ 对于只涉及一个自变量的一元线性回归模型可表示为} \
&y=\beta_0+\beta_1x+\epsilon \
&在这个模型里: \
&&\text{一} \
&\begin{aligned}&\checkmark\quad x\text{叫做自变量或解释变量}\&\checkmark\quad\beta_0\text{表示截距}\&\checkmark\quad\beta_1\text{表示斜率}\end{aligned} \

&{\epsilon\text{表示误差项,反映除}x\text{和}y\text{之间的线性关系之外的随机因素对}y}\text{的影响,是不可避免的}
\end{aligned}
$$

回归方程

描述因变量的期望值如何依赖于自变量的方程称为回归方程,对一元线性回归模型假设,可得到他的回归方程为:
$$
E(y)=\beta_0+\beta_1x
$$
如果回归方程中的参数已知,对于给定的x,利用回归方程就能计算出y的期望值

用样本统计量代替回归方程中的未知参数,就能得到估计的回归方程,即回归直线

参数可以用最小二乘法估计,它是使观察值y与估计值之间的离差平方和达到最小来求解的:
$$
Q=\sum(y-\hat{y})^2=\sum(y-\hat{\beta}_0-\hat{\beta}_1x)^2=\
\sum y^2+n\hat{\beta}_0^2+\hat{\beta}_1^2\Sigma x^2+2\hat{\beta}_0\hat{\beta}_1\Sigma x-2\hat{\beta}_0\sum y-2\hat{\beta}_1\Sigma xy
$$

可得:
$$
\begin{cases}\hat{\beta}_1=\frac{n\sum xy-\sum x\sum y}{n\sum x^2-(\sum x)^2}\\hat{\beta}_0=\bar{y}-\hat{\beta}_1\bar{x}\end{cases}
$$

利用回归直线就可以对数据进行预测,预测分为点估计和区间估计

计算估计标准差

为了度量回归方程的可靠性,通常计算估计标准差,它度量观察值回绕着回归直线的变化程度或离散程度
$$
S_e=\sqrt{\frac{\sum(y-\hat{y})^2}{n-2}}
$$
估计标准差越大,则数据点围绕回归直线的离散程度就越大,回归方程的代表性就越小

估计标准差越小,则数据点围绕回归直线的离散程度就越小,回归方程的代表性就越大,越可靠

置信区间和预测区间的计算:
$$
\text{ 置信区间: } \widehat{y}0\pm t{\frac{\alpha}{2}}s_e\sqrt{\frac{1}{n}+\frac{(x_0-\bar{x})^2}{\sum(x-\bar{x})^2}}\
t_{\frac{\alpha}{2}}是通过查t分布表(或者t分布工具计算,自由度为残差自由度即样本个数-自变量个数-1)获得,{\alpha}表示显著性水平,一般默认0.05,1-{\alpha}表示置信水平
$$

$$
\text{预测区间:}\widehat{y}0\pm t{\frac\alpha2}s_e\sqrt{1+\frac1n+\frac{(x_0-\bar{x})^2}{\sum(x-\bar{x})^2}}
$$

回归模型的验证:

回归直线与各观测点的接近程度称为回归直线对数据的拟合优度

  • 总平方和(TSS):反映因变量的n个观察值与其均值的总离差
    $$
    TSS=\sum y_i^2=\sum({y_i}-{\bar{y_i}})^2
    $$

  • 回归平方和(ESS/SSR):反映y的总变差中,由于x与y之间的线性关系引起的y的变化部分
    $$
    ESS=\sum\hat{y}_i^2=\sum(\hat{y}_i-\bar{y}_i)^2
    $$

  • 残差平方和(RSS/SSE):反映了除了x对y的线性影响之外的其他因素对y变差的作用,是不能由回归直线来解释的y的变差部分
    $$
    RSS=\sum e_i^2=\sum(y_i-\hat{y}_i)^2
    $$
    三者存在关系:
    $$
    TSS=ESS+RSS
    $$

判定系数R^2^:

R^2^表示回归平方和与总平方和的比例,其值在0-1之间:
$$
R^{2}=\frac{\mathrm{ESS}}{TSS}=1-\frac{\mathrm{RSS}}{TSS}=\frac{\sum(\hat{y}{i}-\bar{y}{i})^{2}}{\sum(y_{i}-\bar{y}{i})^{2}}=1-\frac{\sum(y{i}-\hat{y}{i})^{2}}{\sum(y{i}-\bar{y}_{i})^{2}}
$$
为0:说明y的变化与x无关,x完全无助于解释y的变差

为1:说明残差平方和为0,拟合是完全的,y的变化只与x有关

显著性检验:

  • 线性关系检验:

    用来检验自变量x和因变量y之间的线性关系是否显著

    均方回归(MSR)同均方残差(MSE)加以比较,应用F检验来分析二者之间的差别是否显著

    • 均方回归(MSR):回归平方和(ESS)除以相应的回归自由度(自变量个数k)
    • 均方残差(MSE):残差平方和(RSS)除以相应的残差自由度(n-k-1)

    H0(原假设):β1=0,回归系数与0无显著差异,y与x的线性关系不显著

    **H1**:β1≠0,回归显著,认为y与x存在线性关系,所求的线性回归方程有意义

    通过计算检验统计量F可以判断哪种成立:
    $$
    H_0\text{成立时,}F=\frac{ESS/1}{RSS/(n-2)}=\frac{MSR}{MSE}{\sim}F(k,n-k-1)\
    \text{若}F>F_{1-\alpha}(k,n-k-1)\text{,拒绝}H_0\text{否则接受}H_0\
    \text{F分布可以通过查表或计算工具得出,}\alpha\text{为显著性水平}
    $$

  • 回归系数检验:
    $$
    {\hat{\beta}_1\text{是根据最小二乘法求出的样本统计量,服从正态分布}}\
    {\hat{\beta}_1\text{的分布具有如下性质}:} \
    \text{数学期望:}E(\hat{\beta}1)=\beta_1 \
    \text{标准差:}\sigma
    {\widehat{\beta}1}=\frac\sigma{\sqrt{\sum x_i^2-\frac1n(\sum x_i)^2}} \
    \text{,由于}\sigma\text{未知,需用其估计量}S
    {\mathrm{e}}\text{来代替得到}\hat{\beta}1\text{的估计标准差} \
    S
    {\widehat{\beta}_1}=\frac{S_e}{\sqrt{\sum x_i^2-\frac1n(\sum x_i)^2}}\quad\text{, }S_e=\sqrt{\frac{\sum(y_i-\hat{y}_i)^2}{n-k-1}}=\sqrt{MSE} \
    \quad t\text{检验的统计量:}\quad t=\frac{\widehat{\beta}1-\beta_1}{s{\widehat{\beta}_1}}\thicksim{(n-k-1)}
    \text{如果服从则接受原假设}\beta=0\text{,否则拒绝,说明有显著的线性关系}
    $$

多元线性回归分析

$$
\begin{gathered}
\bullet\text{ 一般称由}y=\beta_0+\beta_1x_1+\cdotp\cdotp\cdotp+\beta_kx_k\text{确定的模型}: \
\begin{cases}Y=X\beta+\epsilon\E(\epsilon)=0,COV(\epsilon,\epsilon)=\sigma^2I_n\end{cases} \
\text{为}k\text{元线性回归模型,并简记为}(Y,X\beta,\sigma^2I_n) \
\bullet Y=\begin{bmatrix}y_1\y_2\…\y_n\end{bmatrix} ,X=\begin{bmatrix}1&x_{11}&x_{12}&…&x_{1k}\1&x_{21}&x_{22}&…&x_{2k}\…&…&…&…&…\1&x_{n1}&x_{n2}&…&x_{nk}\end{bmatrix} ,\beta=\begin{bmatrix}\beta_0\\beta_1\…\\beta_k\end{bmatrix} ,\epsilon=\begin{bmatrix}\epsilon_1\\epsilon_2\…\\epsilon_n\end{bmatrix} \
\bullet{y=\beta_0+\beta_1x_1+\cdots+\beta_kx_k}\text{称为回归平面方程}
\end{gathered}
$$

最小二乘法求β:离差平方和最小:
$$
Q=\sum_{i=1}^n(y_i-\beta_0-\beta_1x_{i1}-\cdots-\beta_kx_{ik})^2
$$

$$
\hat{\beta}=(X^{T}X)^{-1}(X^{T}Y)
$$
多元回归模型和回归系数的检验:

  • F检验法:
    $$
    \text{当}H_0\text{成立时;}F=\frac{U/k}{Q_e/(n-k-1)}{\sim}F(k,n-k-1) \
    \bullet\text{ 如果}F>F_{1-\alpha}(k,n-k-1),\text{ 则拒绝}H_0,\text{ 认为}y\text{与}x_1,\cdotp\cdotp\cdotp,x_k\text{之间显著地有线性关系};\text{ 否则就接受}H_0, \
    \text{认为}y\text{与}x_1,\cdotp\cdotp\cdotp,x_k\text{之间线性关系不显著。} \
    \bullet\text{ 其中}U=\sum_{i=1}^n(\hat{y}i-\bar{y})^2(\text{回归平方和}) \
    \text{n为样本个数,k为变量个数}\
    Q
    {e}=\sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^{2} (\text{残差平方和})
    $$
    F分布可以通过查表或者计算工具获得

  • r检验法:
    $$
    R=\sqrt{\frac U{L_{yy}}}=\sqrt{\frac U{U+Q_e}}
    $$

R越接近1,说明线性关系越好、

R和F是等效的,用其中一个进行检验即可

多元线性回归模型的预测:

  • 点预测:
    $$
    \begin{aligned}&\bullet\text{ 求出回归方程}\hat{y}=\hat{\beta}_0+\hat{\beta}_1x_1+\cdots+\hat{\beta}_kx_k,\text{ 对于给定自变量的值}x_1^*,\cdots,x_k^\text{,用}\hat{y}^=\hat{\beta}_0+\hat{\beta}_1x_1^*+\cdots+\&\hat{\beta}_kx_k^\text{来预测}y^=\beta_0+\beta_1x_1^*+\cdots+\beta_kx_k^*+\epsilon,\text{ 称}\hat{y}^\text{为}y^\text{的点预测}\end{aligned}
    $$

  • 区间预测:
    $$
    \bullet\text{ y的}1-\alpha\text{的预测区间(置信)区间为}(\hat{y}1,\hat{y}2),\text{ 其中}\\begin{cases}\widehat{y}1=\widehat{y}-\widehat{\sigma}e\sqrt{1+\sum{i=0}^k\sum{j=0}^kc{ij}x_ix_jt{1-\frac\alpha2}(n-k-1)}\\hat{y}2=\widehat{y}+\widehat{\sigma}e\sqrt{1+\sum{i=0}^k\sum{j=0}^kc_{ij}x_ix_jt_{1-\frac\alpha2}(n-k-1)}\end{cases}\
    \bullet\quad C=L^{-1}=\left(c_{ij}\right),L=X^{\prime}X
    $$

多元线性回归的逐步回归

“最优”的回归方程就是包含所有对Y有影响的变量,而不包含对Y影响不显著的变量回归方程

思路:

  • 从一个自变量开始,根据自变量对Y作用的显著程度(F的大小),从大到小的依次逐个引入回归方程
  • 当引入的自变量由于后引入的自变量而变得不显著时,要将其剔除掉
  • 引入或剔除一个自变量为逐步回归的一步
  • 对于每一步都要进行Y值检验,以确保每次引入新的显著性变量前回归方程中只包含对Y的作用显著的变量
  • 反复进行,直到满足“最优”

非线性回归

对于非线性的关系,需要先画出散点图,然后根据散点图选配曲线,常见的曲线有:

  • 双曲函数曲线
    $$
    \begin{aligned}
    &\bullet\text{公式:}\
    &\begin{cases}\widehat{y}=\frac{x}{a+bx}\\widehat{y}=\frac{a+bx}{x}\\widehat{y}=\frac{1}{a+bx}\end{cases}\
    &\bullet\text{ 变换方式:}\&\hat{y}=\frac x{a+bx},\text{ 两边取倒数后,令}y^{\prime}=\frac x{\hat{y}},\text{得}y^{\prime}=a\underline{x}+b\&\hat{y}=\frac{a+bx}x,\text{令}y^{\prime}=\hat{y}x\&\text{得}y^{\prime}=ax+b\text{ ; }\hat{y}=\frac1{a+bx},\text{两边取倒数后}\text{令}y^{\prime}=\frac1y,\text{得}y^{\prime}=ax+b\end{aligned}
    $$

  • 幂函数曲线
    $$
    \widehat{y}=ax^b\
    \text{当 }a>0\text{、}b>1\text{时,}y\text{随}x\text{的增大而增大(增长),是凹曲线}; \
    \text{当 }a>0\text{、}0<b<1\text{时,}y\text{随}x\text{的增大而增大(增长),但变化缓慢,是凸曲线;} \
    \text{当 }a>0\text{、}b<0\text{时,}y\text{随}x\text{的增大而减小,且以}x,y\text{轴为渐近线,是凹曲线。}\
    \bullet\text{ 变换方式: 两边取对数,令}y^{\prime}=ln\hat{y},x^{\prime}=lnx,a^{\prime}=lna,\text{得}y^{\prime}=a^{\prime}+bx^{\prime}
    $$

  • 指数函数曲线
    $$
    \begin{aligned}
    &\begin{cases}\hat{y}=ae^{bx}\\hat{y}=ab^x\end{cases}\
    &\hat{y}=ae^{bx} \
    &\text{参数b一般用来描述增长或衰减的速度。} \
    &\text{当 }a>0\mathrm{、}b>0\text{时,}y\text{随}x\text{的增大而增大(增长),是凹曲线}; \
    &\text{当 }a>0\mathrm{、}b<0\text{时,}y\text{随}x\text{的增大而减小(衰减),是凹曲线。} \
    \end{aligned}
    $$

  • 倒指数曲线
    $$
    \widehat{y}=ae^{\frac bx},\text{其中}a>0\
    \begin{aligned}
    &\text{当 }a>0\text{、}b>0\text{时,}y\text{随}x\text{的增大而减小(衰减),是凹曲线}; \
    &当a>0、b<0时,y随x的增大而增大(增长),是先凹后凸曲线。
    \end{aligned}\
    \bullet\text{ 变换方式:两边取对数,令}y^{\prime}=ln\widehat{y},a^{\prime}=lna,x^{\prime}=\frac1x\text{ ,得}y^{\prime}=a^{\prime}+bx^{\prime}
    $$

  • 对数函数曲线
    $$
    \widehat{y}=a+blnx(x>0)\
    \begin{aligned}&\bullet\text{ 对数函数表示: }x\text{变数的较大变化可引起}y\text{变数的较小变化。}\&b>0\text{时,}y\text{随}x\text{的增大而增大,是凸曲线;}\&b<0\text{时,}y\text{随}x\text{的增大而减小,是凹曲线。}\end{aligned}\
    \bullet\text{ 变换方式:令}x^{\prime}=lnx,\text{得}\hat{y}=a+bx^{\prime}.
    $$

  • S型曲线

    又称生长曲线,可以描述植物的生长过程,传染病的发展趋势等。

    特点是先缓慢增长,而在以后的某一范围内迅速增长,达到一定限制后又缓慢下来
    $$
    \widehat{y}=\frac k{1+ae^{-bx}}(a\text{、}b\text{、}k\text{均大于}0)\x=0 ,\widehat{y}=\frac k{1+a} ; x\to\infty ,\widehat{y}=k\
    \bullet\text{ 变换方式:两边取倒数再取对数后,}y^{\prime}=ln(\frac{k-\hat{y}}{\hat{y}}),a^{\prime}=lna,\text{得}y^{\prime}=a^{\prime}+bx
    $$

当六类曲线都配对不上时,,可以使用以下方法:

  • 回归多项式:
    $$
    \begin{aligned}
    &\text{设变量x、Y的回归模型为} \
    &Y=\beta_0+\beta_1x+\beta_2x^2+\cdots+\beta_px^p+\epsilon \
    &\text{,} \text{其中}p\text{是已知的,}\beta_i(i=1,2,\cdotp\cdotp\cdotp,p)\text{是未知参数,}\epsilon\text{服从正态分布}N(0,\sigma) \
    &Y=\beta_0+\beta_1x+\beta_2x^2+\cdots+\beta_px^p \
    &\text{称为回归多项式,上面的回归模型称为多项式回归。}
    \end{aligned}
    $$

灰色预测模型

灰色系统用颜色深浅反映信息量的多少,一个系统是黑色的,就是这个系统是黑洞洞的,信息量太少;一个系统是白色的,就是这个系统的清楚的,信息量充足的。处于黑白之间的系统,就是信息不完全的系统,称为灰色系统或灰系统。

灰色预测适用情况:

  • 适合以年份度量的非负数据(月份或季度适合时间序列模型)
  • 数据能经过指数规律校验(除了前两期外,后面至少90%的期数的光滑比要低于0.5)
  • 数据的期数较短和其他数据之间的关联性不强,期数小于等于10,太短也不行,如果期数较长一般用传统的时间序列模型

GM(1,1)模型

GM表示Greay Model灰色模型,(1,1)表示只含有一个变量的一阶微分方程模型

步骤

  • 根据原始的离散非负数据列,通过累加等方式削弱随机性,获得有规律的离散数据列
    $$
    设x^(0)=(x^{(0)}(1),x^{(0)}(2),…,x^{(0)}(n))是最初的非负数据列,我们可以对其累加,得到新的数\
    据列$\chi^{(1)}$\
    \chi^{(1)}=\left(\chi^{(1)}(1),\chi^{(1)}(2),…,\chi^{(1)}(n)\right)\
    其中:x^{(1)}(m)=\sum_{\mathrm{i}=1}^{\mathrm{m}}x^{(0)}(i),m=1,2,…,n
    $$

  • 建立相应的微分方程模型,得到离散点处的解

  • 再通过累减求得的原始数据的估计值,从而对原始数据预测

时间序列模型

时间序列也称动态序列,时间分析大致可分三大部分:描述过去、分析规律、预测未来,时间序列常用ARIMA模型

时间序列根据时间和数值性质的不同,可以分为时期时间序列时点时间序列

ARIMA模型

ARIMA(p,d,q)模型指:

  • ARMA(p,q)模型:

    • AR(p):

      描述当前值和历史值之间的关系,用变量自身的历史数据对自身进行预测,其必须要满足平衡性要求
      $$
      \bullet\quad p\text{阶自回归过程的公式定义:}\quad y_t=\mu+\sum_{i=1}^p\gamma_iy_{t-i}+\epsilon_t\text{,}p\text{表示用几期的历史值来预测}\\bullet\quad y_t\text{是当前值}\quad\mu\text{是常数项}\quad p\text{是阶数}\quad\gamma_i\text{是自相关系数}
      $$

  • MA(q):

    该模型关注的是自回归模型中误差项的累计
    $$
    q\text{阶自回归过程的公式定义:} y_{t}=\mu+\epsilon_{t}+\sum_{i=1}^{q}\theta_{i}\epsilon_{t-i}\
    即时间序列当前值与历史值没有关系,而只依赖于历史白噪声的线性组合\
    能有效消除预测中的随机波动
    $$

    将两个模型结合得到ARMA(p,q)模型
    $$
    \bullet\text{ 公式定义: }y_t=\mu+\sum_{i=1}^p\gamma_iy_{t-i}+\epsilon_t+\sum_{i=1}^q\theta_i\epsilon_{t-i}
    $$

  • I(d)模型

p是自回归项,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

  • 步骤:

    • 对序列绘图,进行平稳性校验,对非平稳时间序列要先进行d阶差分转化为平稳时间序列
    • 对平稳时间序列分别求得其自相关系数(ACF)和偏自系数(PACF),通过对自相关图和偏自相关图的分析,得到阶数p,q
    • 由上得到d、p、q,建立ARIMA模型,然后开始对得到的模型进行模型检验
  • 平稳性:

    平稳性就是要求经由样本时间序列得到的拟合曲线在未来的一段时间内仍然能够按照现有的形态延续下去

    平稳性要求序列的均值方差不发生明显变化

    • 严平稳:序列所有统计性质(期望、方差)都不会随着时间而发生改变
    • 宽平稳:期望与相关系数(依赖性)不变,就是说t时刻的值X依赖于过去的信息

    如果一个时间序列不是平稳的,通常通过差分进行转换

  • 差分法:

    时间序列在t和t-1时刻的差值。将非平稳序列变平稳。
    $$
    \Delta yx=y(x+1)-y(x),(x=0,1,2,…)\
    比如一组数列[0,1,2,3,4,5,6,7]\
    进行差分后就会得到新数列[1,1,1,1,1,1]
    $$

  • 自相关系数(ACF)
    $$
    公式:$ACF( k) = \rho {\mathrm{k} }= \frac {\mathrm{Cov}( \mathrm{y_t, y{t- k}}) }{Var( y_t) }$ 取值范围为[-1,1]
    $$

  • 偏自相关系数(PACF)
    $$
    公式:$PACF(k)=\frac{COV[(Z_{t}-\bar{Z}{t}),(Z{t-k}-\bar{Z}{t-k})]}{\sqrt{var(Z{t}-\bar{Z}{t})}\sqrt{var(Z{t-k}-\bar{Z}_{t-k})}}$
    $$