python短期预测图_用Python预测「周期性时间序列」的正确姿势

本文分享了一个使用Python进行时间序列预测的实战项目,通过分析API访问日志,利用ARIMA模型预测流量,处理包括数据平滑和周期性分解等步骤,最终达到异常检测的目标。文章提供完整代码和样例数据。
摘要由CSDN通过智能技术生成

这是当初刚进公司时,leader给的一个独立练手小项目,关于时间序列预测,情景比较简单,整个过程实现下来代码也仅100多行,但完成过程中踩了很多坑,觉的有必要分(tu)享(cao)一下。完整代码和样例数据放到了我的github上(文章仅粘贴部分):

https://github.com/scarlettgin/cyclical_series_predict

1、背景

公司平台上有不同的api,供内部或外部调用,这些api承担着不同的功能,如查询账号、发版、抢红包等等。日志会记录下每分钟某api被访问了多少次,即一个api每天会有1440条记录(1440分钟),将每天的数据连起来观察,有点类似于股票走势的意思。我想通过前N天的历史数据预测出第N+1天的流量访问情况,预测值即作为合理参考,供新一天与真实值做实时对比。当真实流量跟预测值有较大出入,则认为有异常访问,触发报警。

2、数据探索

我放了一份样例数据在data文件夹下,

看一下数据大小和结构

data = pd.read_csv(filename)

print('size: ',data.shape)

print(data.head())

data.png

数据大小:

共10080条记录,即10080分钟,七天的数据。

字段含义:

date:时间,单位分钟

count:该分钟该api被访问的次数

画图看一下序列的走势:(一些画图等探索类的方法放在了test_stationarity.py 文件中,包含时间序列图,移动平均图,有兴趣的可以自己尝试下)。

def draw_ts(timeseries):

timeseries.plot()

plt.show()

data = pd.read_csv(path)

data = data.set_index('date')

data.index = pd.to_datetime(data.index)

ts = data['count']

draw_ts(ts)

序列.png

看这糟心的图,那些骤降为0的点这就是我遇到的第一个坑,我当初一拿到这份数据就开始做了。后来折腾了好久才发现,那些骤降为0的点是由于数据缺失,ETL的同学自动补零造成的,沟通晚了(TДT)。

把坑填上,用前后值的均值把缺失值补上,再看一眼:

填充好缺失值的序列.png

发现这份数据有这样几个特点,在模型设计和数据预处理的时候要考虑到:

1、这是一个周期性的时间序列,数值有规律的以天为

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值