一文搞懂如何使用饱和预测

一个帅气的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)

一文搞懂如何使用饱和预测_第1张图片
       我们可以看到虚线为即将饱和的地方。

在这里插入图片描述

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

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

一文搞懂如何使用饱和预测_第2张图片
在这里插入图片描述

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

future = m.make_future_dataframe(periods=356)

       可以看出第二张图片继续趋于饱和。
一文搞懂如何使用饱和预测_第3张图片
一文搞懂如何使用饱和预测_第4张图片

源码

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下载

你可能感兴趣的