python趋势外推法

趋势外推法的python实现

原理

趋势外推法又称为趋势延伸法,它是根据预测变量的历史时间序列揭示出的变动趋势外推将来,以确定预测值的一种预测方法。趋势外推法通常用于预测对象的发展规律是呈渐进式的变化,而不是跳跃式的变化,并且能够找到一个合适函数曲线反映预测对象变化趋势的情况。实际预测中最常采用的是一些比较简单的函数模型,如线性模型、指数曲线、生长曲线、包络曲线等。

最终实现结果

实现趋势外推法:一次、二次、三次等;

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)

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值