python数据分析(9)——挖掘建模(4)时序模式

python小能手

发布日期: 2019-01-03 15:40:45 浏览量: 1172
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1. 时间序列算法

2. 时间序列的预处理

2.1平稳性检验

2.1.1 时序图检验

平稳的时序图序列值在一个常数附近随机波动,而且波动的范围有界。

2.1.2 自相关图检验

平稳序列具有短期相关性。

2.1.3 单位根检验

存在单位根是非平稳时间序列。

2.2 纯随机性检验

序列值之间没有任何关系(理想状态)。

3. 平稳时间序列

3.1 AR模型

3.2 MA模型

3.3 ARMA模型

3.4建模步骤

4. 非平稳时间序列分析

4.1 ARIMA模型

4.2 代码实现

  1. #-*- coding: utf-8 -*-
  2. #arima时序模型
  3. import pandas as pd
  4. #参数初始化
  5. discfile = 'arima_data.xls'
  6. forecastnum = 5
  7. #读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式
  8. data = pd.read_excel(discfile, index_col = u'日期')
  9. #时序图
  10. import matplotlib.pyplot as plt
  11. plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
  12. plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
  13. data.plot()
  14. plt.show()
  15. #自相关图
  16. from statsmodels.graphics.tsaplots import plot_acf
  17. plot_acf(data).show()
  18. #平稳性检测
  19. from statsmodels.tsa.stattools import adfuller as ADF
  20. print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
  21. #返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore
  22. #差分后的结果
  23. D_data = data.diff().dropna()
  24. D_data.columns = [u'销量差分']
  25. D_data.plot() #时序图
  26. plt.show()
  27. plot_acf(D_data).show() #自相关图
  28. from statsmodels.graphics.tsaplots import plot_pacf
  29. plot_pacf(D_data).show() #偏自相关图
  30. print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分'])) #平稳性检测
  31. #白噪声检验
  32. from statsmodels.stats.diagnostic import acorr_ljungbox
  33. print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) #返回统计量和p值
  34. from statsmodels.tsa.arima_model import ARIMA
  35. data[u'销量'] = data[u'销量'].astype(float)
  36. #定阶
  37. pmax = int(len(D_data)/10) #一般阶数不超过length/10
  38. qmax = int(len(D_data)/10) #一般阶数不超过length/10
  39. bic_matrix = [] #bic矩阵
  40. for p in range(pmax+1):
  41. tmp = []
  42. for q in range(qmax+1):
  43. try: #存在部分报错,所以用try来跳过报错。
  44. tmp.append(ARIMA(data, (p,1,q)).fit().bic)
  45. except:
  46. tmp.append(None)
  47. bic_matrix.append(tmp)
  48. bic_matrix = pd.DataFrame(bic_matrix) #从中可以找出最小值
  49. p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。
  50. print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
  51. model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
  52. model.summary2() #给出一份模型报告
  53. model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。

原始序列图

原始自相关图

一阶差分后序列图

一阶差分后自相关图

一阶差分后偏自相关图

结果

原始序列的ADF检验结果为: (1.8137710150945274, 0.9983759421514264, 10, 26, {‘1%’: -3.7112123008648155, ‘5%’: -2.981246804733728, ‘10%’: -2.6300945562130176}, 299.46989866024177)

差分序列的ADF检验结果为: (-3.1560562366723532, 0.02267343544004886, 0, 35, {‘1%’: -3.6327426647230316, ‘5%’: -2.9485102040816327, ‘10%’: -2.6130173469387756}, 287.5909090780334)
差分序列的白噪声检验结果为: (array([11.30402222]), array([0.00077339]))

BIC最小的p值和q值为:0、1

上传的附件 cloud_download arima_data.xls ( 18.94kb, 3次下载 ) cloud_download arima_test.py ( 2.32kb, 2次下载 )

发送私信

学习python,勤学勤练,永不放弃

13
文章数
3
评论数
eject