原理
趋势外推法又称为趋势延伸法,它是根据预测变量的历史时间序列揭示出的变动趋势外推将来,以确定预测值的一种预测方法。趋势外推法通常用于预测对象的发展规律是呈渐进式的变化,而不是跳跃式的变化,并且能够找到一个合适函数曲线反映预测对象变化趋势的情况。实际预测中最常采用的是一些比较简单的函数模型,如线性模型、指数曲线、生长曲线、包络曲线等。
最终实现结果
实现趋势外推法:一次、二次、三次等;
1.画出数据的散点图;
2.打印出差分:一阶、二阶、一阶差比率;
3.求出方差的参数;(t可以自取)
4.进行预测;
说明
数据如下图,该数据为个人编造的测试数据,共为11个年份的11组数据
最终结果如下如图所示,通过计算差分、参数ab等一系列操作,以课本中信息预测方法原理为基础,同时通过互联网工具进行搜索数据参考,实现了对数据通过趋势外推法的预测,能够很好的在原有数据的基础上进行预测。
源代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
def Qvshiwaitui(xIN, yIN,n, n1, sum_n):
tn = sum_n
yn = np.mean(yIN)
sumy = np.sum(yIN*n1)
sumt = np.sum(n1**2)
b = (sumy - yn*tn)/(sumt - tn/n*tn)
a = yn - b*tn/n
print("b的值为:", b)
print("a的值为", a)
yOUT(a, b, n)
x = input('想对第几年进行差分运算:')
x = eval(x)
CF(a,b,x)
def yOUT(a, b, n):
y = a + b*(n+1.0)
print("%d年数据的预测值为:"%(n+2010), y)
def CF(a,b,x):
y11 = (a + b*x) - (a + b*(x-1))
y12 =(a + b*(x-1))-(a + b*(x-2))
y21 = y11-y12
y22 = (a + b*(x-1)) - (a + b*(x-2))+(a + b*(x-2)) - (a + b*(x-3))
y3 = y21-y22
print("第%d年数据的一阶差分为:"%x, y11)
print("第%d年数据的二阶差分为:" %x, y21)
print("第%d年数据的三阶差分为:" %x, y3)
t = 2.0
sum_n = 0
xIN = np.array([2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020])
yIN = np.array([15.4, 22.5, 36.7, 33.1, 56.8, 64.2, 83.5,90.1, 99.3, 120.2, 117.4])
n = len(yIN)
n1 = []
for i in range(n+1):
n1.append(i)
sum_n += i
n1.pop(0)
n1 = np.array(n1)
plt.plot(xIN, yIN)
plt.xlabel("year")
plt.ylabel("date")
plt.show()
Qvshiwaitui(xIN, yIN, n, n1, sum_n)