饱和预测——大作业系列

👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ⌨个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主

在这里插入图片描述


☝☝前言

本文采用Prophet模型对时间序列进行饱和预测,饱和预测通俗一点理解就是在对一系列参数进行预测时会达到一个顶点,我们需要研究的就是预测这个饱和点。


👏👏详解

       Prophet允许我们使用逻辑斯蒂模型进行预测,并具有一定承载能力,本文数据集采用维基百科R语言访问的日志次数来详细介绍。

分析数据

       首先打开数据集对其进行分析,共分为dsy两行

"ds","y"
"2008-01-30",5.97635090929793
"2008-01-16",6.04973345523196
"2008-01-17",6.01126717440416
"2008-01-14",5.95324333428778
"2008-01-15",5.91079664404053
"2008-01-12",5.40717177146012
...

       然后读取数据并手动设置一个承载能力cap:8.5
(注意:cap不能随便设定,需要根据市场数据或专业知识设定,也可以是一个序列,并不是恒定的)

df = pd.read_csv('example_wp_log_R.csv')
df['cap'] = 8.5

数据集划分

将训练集和测试集分为9:1两份

test_ratio = 0.1
test_size = int(df.shape[0]*test_ratio)
train_size = df.shape[0] - test_size
train_set = df[:train_size]
test_set = df[train_size:]
print(test_set)

建立模型

       上面已经说过,本文使用逻辑斯蒂模型进行预测,所以growth='logistic'这句代码指定模型,然后用fit函数进行训练

m = Prophet(growth='logistic')
m.fit(df)

模型预测

       我们想预测未来测试集变化则需要先制作一个数据框,然后指定未来容量,这里我们加入一个序列。

future = m.make_future_dataframe(periods=test_size)
future['cap'] = 8.5
future['cap1'] = 9.0
fcst = m.predict(future)
fig = m.plot(fcst)

在这里插入图片描述
       我们可以看到虚线为即将饱和的地方。

在这里插入图片描述

       同样,我们为了更清晰看到数据预测结果,我们也可以单独拿出预测结果来与原数据进行比较.

WeiLai = fcst[['yhat']][train_size:]
plt.plot(Normal)
plt.plot(WeiLai,color="red")
plt.show()

在这里插入图片描述
在这里插入图片描述

       我们也可以预测未来一年的信息,但是你要知道,预测的越久它的准确性就越低,更改代码位置

future = m.make_future_dataframe(periods=356)

       可以看出第二张图片继续趋于饱和。
请添加图片描述
在这里插入图片描述

源码

import pandas as pd
import numpy as np
from prophet import Prophet
import matplotlib.pyplot as plt

df = pd.read_csv('example_wp_log_R.csv')
Normal = pd.DataFrame(df,columns=['y'])
df['cap'] = 8.5
test_ratio = 0.1

test_size = int(df.shape[0]*test_ratio)
train_size = df.shape[0] - test_size
train_set = df[:train_size]
test_set = df[train_size:]
print(test_set)
m = Prophet(growth='logistic')
m.fit(df)
future = m.make_future_dataframe(periods=test_size)
future['cap'] = 8.5
future['cap1'] = 9.0
fcst = m.predict(future)

fig = m.plot(fcst)
plt.show()
WeiLai = fcst[['yhat']][train_size:]
plt.plot(Normal)
plt.plot(WeiLai,color="red")
plt.show()

csv下载

这是一个相对简单的大作业,只能说到及格,但是胜在简单易懂,如果实在来不及可以用这个哦,对你有帮助的话可以给博主点赞收藏支持一下咩 🥰🥰
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love And Program

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值