本次案例来自2022华为杯第E题,第2小问。给定了2012.01-2022.03的土壤湿度的月度数据,需要预测2022.04-2023.12的土壤湿度的月度数据。典型的时间序列预测。

传统的时间序列预测肯定是ARIMA模型,可以参考我之前的文章。Python统计学10——时间序列分析自回归模型(ARIMA)

现在流行的方法肯定是深度学习的循环神经网络(RNN,LSTM,GRU),也可以参考我这篇文章。

Python深度学习05——Keras循环神经网络实现股价预测


本次我们要用的是一种比较数学的方法,灰色预测法。

灰色预测法是一种对含有不确定因素的系统进行预测的方法。在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据处理后的时间序列即称为生成列。灰色系统常用的数据处理方式有累加和累减两种。
灰色预测是以灰色模型为基础的,在众多的灰色模型中,GM(1,1)模型最为常用。

原理公式就不介绍了。

灰色预测法的通用性较强,一般的时间序列场合都适用,尤其适合那些规律性差且不清楚数据产生机理的情况。灰色预测模型的优点是预测精度高、模型可检验、参数估计方法简单、对小数据集有很好的预测效果;缺点是对原始数据序列的光滑度要求很高,在原始数据列光滑性较差的情况下灰色预测模型的预测精度不高,甚至通不过检验。


认识数据

首先我们对问题要有清晰的认识。预测无非就是给一些数据,然后需要预测其他的一些数据,题目给的数据大概是这样的:

给定了2012.01-2022.03的土壤湿度的月度数据,需要预测2022.04-2023.12的土壤湿度的月度数据。

下面使用Python读取:

导入包:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False                #显示负号

读取数据,将前两列——年份和月份解析为时间,然后对时间索引进行排序,画折线图:

土壤湿度=pd.read_csv('土壤湿度.csv',parse_dates={'时间':[0,1]})
土壤湿度=土壤湿度.set_index('时间').sort_index()
土壤湿度.plot(figsize=(10,4))

这就是初始数据,从2012.01-2022.03的土壤湿度的月度数据,需要预测2022.04-2023.12的土壤湿度数据。


灰色预测

定义灰色预测函数:

def GM11(x0): #自定义灰色预测函数x1 = x0.cumsum() #1-AGO序列z1 = (x1[:len(x1)-1] + x1[1:])/2.0 #紧邻均值(MEAN)生成序列z1 = z1.reshape((len(z1),1))B = np.append(-z1, np.ones_like(z1), axis = 1)Yn = x0[1:].reshape((len(x0)-1, 1))[[a],[b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) #计算参数f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) #还原值delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))C = delta.std()/x0.std()P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率

其实不理解原理也没什么,就按照我下面的流程用就行。

准备数据的值和时间索引:

new_reg_data = 土壤湿度.iloc[:,-4:]    #取最后4列,即自己需要预测的四个变量
new_reg_data.index = pd.to_datetime(土壤湿度.index)  #将原始数据的索引变为时间类型

查看现在的数据:

new_reg_data

可以看到时间,现在是123条。

由于需要预测2022.04-2023.12期间的四个变量,我们先要定义一个时间索引,一个月份一个月份的去预测。然后对每个变量进行循环,即每个变量都去拟合一个新的灰色预测函数。在每个月度预测完了后就给这一行赋值。这样能保证上一个预测值可以加入下一轮的预测里面。

index=pd.Series(pd.date_range('2022-04','2024-1',freq='M')).astype('datetime64[M]')for i,ind in enumerate(index):pred=[]for c in new_reg_data.columns:f = GM11(new_reg_data.loc[:,c].values)[0]pred.append(f(1+len(new_reg_data)))new_reg_data.loc[ind,:] = np.array(pred)

查看结果:

new_reg_data

可以看到时间,现在是144条。

画图看拟合效果:

new_reg_data.plot(figsize=(10,4),title='预测的土壤湿度')
#plt.savefig('第二问的预测结果.jpg',dpi=128)

emmmm,效果一般般,虽然预测出来的不是常数,但是预测的值也比较平滑。这也是灰色预测的一个特点。

当然建模比赛不会只用这么简单的模型....那肯定是神经网络什么的都往上整了,不过由于这个题目的数据量小,神经网络不太合适。灰色预测适合小数据集,该案例算是提供一个新的时间序列预测的思路吧

Python数据分析案例11——灰色预测法预测时间序列数据相关推荐

  1. 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析

  2. python数据分析6:双色球 使用线性回归算法预测下期中奖结果

    友情提示:双色球预测分析只为练习技术,不要抱着预测中大奖的心态,不可能预测准确. python数据分析1:获取双色球历史信息 python数据分析2:双色球 蓝红球分析统计 python数据分析3:双 ...

  3. Python数据分析之双色球基于线性回归算法预测

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球 ...

  4. python数据分析实战-Python数据分析案例实战(慕课版)

    基本信息 书名:Python数据分析案例实战(慕课版) :59.80元 作者:王浩,袁琴,张明慧 著 出版社:人民邮电出版社 出版日期:2020_06_01 ISBN:9787115520845 字数 ...

  5. 视频教程-Python数据分析案例实战 视频课程-Python

    Python数据分析案例实战 视频课程 计算机硕士,多年工作经验,技术和产品负责人. 多年推荐系统/NLP/大数据工作经验. 负责公司多个AI项目产品落地,包括文本分类.关键词抽取.命名实体识别.对话 ...

  6. python数据分析实战案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  7. python 数据分析 实际案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  8. ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据

    全文下载链接:http://tecdat.cn/?p=22511 标准的ARIMA(移动平均自回归模型)模型允许只根据预测变量的过去值进行预测. 相关视频 该模型假定一个变量的未来的值线性地取决于其过 ...

  9. Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)

    Pandas数据分析案例(盛华化工锅炉排放数据可视化分析) 实验环境 数据集介绍 问题描述 实验步骤 一.数据导入与观察 二.数据转换 三.数据可视化分析 相关资源 实验环境 操作系统:Linux/W ...

最新文章

  1. 【老孙随笔】关羽和吕蒙——天才的失败
  2. mysql的1067启动错误的解决
  3. 分享一个现代的,免费的,简单而有效的编辑器Vis
  4. 按位与 matlab,c# 按位与,按位或
  5. 数字图像处理 第四章 图像增强
  6. java怎么写事件listener_java 事件监听器ActionListener
  7. 饿了么超时20分钟_饿了么回应“多等5分钟”,网友气炸了
  8. maven本地仓库中存在jar包,但编译不成功,显示jar包不存在
  9. linux并发控制方法,linux系统并发控制
  10. OFFICE技术讲座:JDK绘制旋转斜体字体的效果
  11. Redis容量及使用规划(转)
  12. 谷歌地球替代软件、谷歌街景、谷歌三维城市模型查看全方案
  13. h2o java,H2O AutoML入门开发简介
  14. itext 导出pdf 图片太大
  15. HTML5制作坦克大战游戏+Canvas绘制基础图形——学习笔记一
  16. 怎么让蜘蛛快速抓取的方法
  17. iApp(11)情侣视频播放器
  18. winform实现拖曳功能
  19. Style Transfer(PyTorch)
  20. python工匠技巧系列(给变量注明类型)

热门文章

  1. Pinterest营销:跨境卖家广告投放指南
  2. STM32Cube扩展包开发指南
  3. NDK FFmpeg 音视频解码
  4. libhdfs 的C API
  5. Flutter 用Texture控件在Windows平台实现视频渲染
  6. python泊松分布计算_当λ很大时泊松分布如何计算?
  7. postgres 数据导入导出
  8. 线程?对!!这就是Java线程超级细致解读---Java学习总结
  9. 数学连乘和累加运算符号_求和符号Σ和连乘符号Π在什么情况下可交换?希望能给出证明或具体证明出处。...
  10. golang开发命令行工具-cobra