Python实现ARMA模型
数据科学与人工智能
共 1213字,需浏览 3分钟
· 2020-10-11
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()
公众号推荐:数据思践
数据思践公众号记录和分享数据人思考和践行的内容与故事。
《数据科学与人工智能》公众号推荐朋友们学习和使用Python语言,需要加入Python语言群的,请扫码加我个人微信,备注【姓名-Python群】,我诚邀你入群,大家学习和分享。
关于Python语言,有任何问题或者想法,请留言或者加群讨论。
评论
金融研究 | 使用Python测量关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
CVPR 2024|大视觉模型的开山之作!无需任何语言数据即可打造大视觉模型
↑ 点击蓝字 关注极市平台作者丨科技猛兽编辑丨极市平台极市导读 本文提出一种序列建模 (sequential modeling) 的方法,不使用任何语言数据,训练大视觉模型。>>加入极市CV技术交流群,走在计算机视觉的最前沿本文目录1 序列建模打造大视觉模型(来自 U
极市平台
1
金融研究(更新) | 使用Python构建关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
词向量(更新) | 使用MD&A2001-2022语料训练Word2Vec模型
buTips: 公众号推送后内容只能更改一次,且只能改20字符。 如果内容出问题,或者想更新内容, 只能重复推送。 为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-03-24-load-w2v-and-expand-your-concpe
大邓和他的Python
0
谷歌员工爆料 Python 基础团队原地解散
转自 | 机器之心编辑 | 蛋酱什么?谷歌解雇了整个 Python 基础团队?「当与你直接共事的每个人,包括你的主管,都被裁员 —— 哦,是职位被削减,而你被要求安排他们的替代者入职,这些人被告知在不同的国家担任同样的职位,但他们并不为此感到高兴,这是很艰难的一天。」发布这一动态的 Tho
机器学习算法与Python实战
0
人工智能周刊#18:微软发布手机端大模型、Llama 3 中文模型列表、苹果开源新项目、
主打尊重隐私的搜索引擎 duckduckgo,也推出了 ai chat 服务,可以使用 chatgpt 或者 claude机器学习周刊:关注 Python、机器学习、深度学习、大模型等硬核技术本期目录:1、Qwen1.5-110B:Qwen1.5 系列的首个千亿参数开源模型2、苹果开源
机器学习算法与Python实战
0
五一抢票难,Github上这几个Python项目,你可以试试
又到五一长假啦(虽然其实就放了1天),大家是打算家里蹲or出去玩,又或者是在公司加班呢...今天给大家介绍三个和12306相关的项目,看看你是否用得上。/01/ py12306py12306购票助手,顾名思义,12306买票的~需要在python 3.6以上版本运行程序。1. 安装依赖gi
Crossin的编程教室
0
谷歌员工爆料Python基础团队原地解散
机器之心报道编辑:蛋酱什么?谷歌解雇了整个 Python 基础团队?「当与你直接共事的每个人,包括你的主管,都被裁员 —— 哦,是职位被削减,而你被要求安排他们的替代者入职,这些人被告知在不同的国家担任同样的职位,但他们并不为此感到高兴,这是很艰难的一天。」发布这一动态的 Thomas Wouter
机器学习初学者
0