Python实现ARMA模型
1.导入相关包,查看数据情况
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
%matplotlib inline
df = pd.read_csv('./RFM分析1.csv')
df.info()
输出:
可以看出这里的数据比较完整,没有缺失值不用清洗缺失值。
2.请洗数据 2.1将销售日期转换成datetime类型
df['销售日期'] = pd.to_datetime(df['销售日期'])
# 查看是否修改成功
df.info()
输出:
2.2 使用describe查看均值、最大、最小值情况
df.describe()输出:
支付金额有负数。查看负数的数据有多少条。
df[df['销售金额'] < 0]
这里有6946条,相对于总数293751,数据比较小,直接当异常值来处理。这里直接获取销售金额大于0的数据来进行分析。
df = df[df['销售金额'] > 0]
# 重新看销售金额的最小值
df.describe()
2.3 设置销售日期为index
df.index = df['销售日期']
df.head()
输出:
3.利用ARMA模型进行预测 3.1 先查看现有的销售趋势
df_Month = df.resample('M').sum()
plt.figure(figsize=(18, 7), dpi=128)
df_Month['销售金额'].plot()
输出:
3.2 对数据进行训练
from statsmodels.tsa.arima_model import ARMA
from datetime import datetime
from itertools import product
# 设置p阶,q阶范围
# product p,q的所有组合
# 设置最好的aic为无穷大
# 对范围内的p,q阶进行模型训练,得到最优模型
ps = range(0, 6)
qs = range(0, 6)
parameters = product(ps, qs)
parameters_list = list(parameters)
best_aic = float('inf')
results = []
for param in parameters_list:
try:
model = ARMA(df_Month['销售金额'], order=(param[0], param[1])).fit()
except ValueError:
print("参数错误:", param)
continue
aic = model.aic
if aic < best_aic:
best_model = model
best_aic = model.aic
best_param = param
results.append([param, model.aic])
results_table = pd.DataFrame(results)
results_table.columns = ['parameters', 'aic']
print("最优模型", best_model.summary())
输出:
3.3 预测 # 先增加后几个月的时间日期,进行合并 date_list = [datetime(2014, 8, 31), datetime(2014, 9, 30), datetime(2014, 10, 31), datetime(2014, 11, 30), datetime(2014, 12, 31), datetime(2015, 1, 31)] df_Month = df_Month[['销售金额']] future = pd.DataFrame(index=date_list, columns= df_Month.columns) df_Month = pd.concat([df_Month, future]) df_Month 输出:
进行预测,可视化df_Month['forecast'] = best_model.predict(start=0, end=58) plt.figure(figsize=(20, 7)) df_Month['销售金额'].plot(label='实际销售金额') df_Month['forecast'].plot(color='r', ls='--', label='预测销售金额') plt.legend() plt.show()
- 关于ORA-01555的问题分析(r5笔记第87天)
- 项目工具类
- AJAX常见面试题
- 干货 | Tomcat类加载机制触发的Too many open files问题分析
- 并行查询缓慢的问题分析(r5笔记第86天)
- Swagger文档转Word 文档
- AJAX应用【股票案例、验证码校验】
- IT中的闰秒问题(r5笔记第85天)
- 浅谈exp/imp(下) (r5笔记第84天)
- 多线程编程学习五(线程池的创建)
- 再学习之Spring(面向切面编程).
- Hybris CronJob
- tomcat源码编译和环境搭建(r5笔记第83天)
- NumPy 将停止支持 Python 2,这里有一份给数据科学家的 Python 3 使用指导
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言马尔可夫体制转换模型Markov regime switching
- Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
- python3用ARIMA模型进行时间序列预测
- R语言马尔可夫转换模型研究交通伤亡人数事故预测
- scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘
- 使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析
- R语言中的马尔科夫机制转换(Markov regime switching)模型
- R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
- nginx快速入门
- R语言中进行期权定价的Heston模型
- 使用R语言随机波动模型SV处理时间序列中的随机波动率
- 20个ES6面试高频问题
- i++和++i傻傻分不清楚?这里给你最清楚的解答
- android APT 使用
- Flutter异步编程async与await的基本使用