Python趋势外推预测模型实验完整版

趋势外推预测模型实验完整版

实验目的

通过趋势外推预测模型(佩尔预测模型),掌握预测模型的建立和应用方法,了解趋势外推预测模型(佩尔预测模型)的基本原理

实验内容

趋势外推预测模型

实验步骤和过程

(1)第一步:学习趋势外推预测模型(佩尔预测模型)相关知识。

趋势外推预测模型是一种基于历史数据的数学模型,旨在预测未来的趋势。它是通过分析历史数据的趋势和规律,预测未来发展的趋势。趋势外推预测模型是一种有用的工具,可以帮助人们做出更准确的决策。

本次实验主要使用佩尔预测模型,这里进行详细介绍。

概念

佩尔预测模型是一种基于时间序列的预测模型,它通过对历史数据的分析,预测未来的趋势。该模型是由法国经济学家佩尔(Maurice Allais)提出的,因此得名佩尔预测模型。它是一种广泛应用于经济、金融、管理等领域的预测模型。


原理

佩尔预测模型的原理是基于时间序列的分析方法,它将时间序列分为趋势、季节性和随机性三个部分,然后分别对这三个部分进行分析预测。

趋势分析
趋势是指时间序列中的长期变化规律,它可以是上升趋势、下降趋势或平稳趋势。佩尔预测模型通过趋势分析来预测未来的发展趋势。趋势分析方法包括移动平均法、指数平滑法和回归分析法等。

季节性分析
季节性是指时间序列中的周期性变化规律,它通常是由于季节、节假日等因素引起的。佩尔预测模型通过季节性分析来预测未来的季节性变化。季节性分析方法包括季节性指数法、季节性回归法等。

随机性分析
随机性是指时间序列中的无规律变化,它通常是由于偶然因素引起的。佩尔预测模型通过随机性分析来预测未来的随机性变化。随机性分析方法包括自回归模型、移动平均模型和ARMA模型等。

应用

佩尔预测模型在经济、金融、管理等领域具有广泛的应用。以下是几个应用实例:

经济预测
佩尔预测模型在经济预测中具有重要的应用。例如,通过分析历史数据,可以预测未来的通货膨胀率、失业率、GDP增长率等经济指标。这些预测结果可以帮助政府和企业做出更准确的决策。

股票预测
佩尔预测模型在股票预测中也有广泛的应用。例如,通过分析历史股价数据,可以预测未来股价的趋势。这些预测结果可以帮助投资者做出更明智的投资决策。

能源预测
佩尔预测模型在能源预测中也有重要的应用。例如,通过分析历史能源消耗数据,可以预测未来能源需求的趋势。这些预测结果可以帮助政府和企业做出更明智的能源规划。

优缺点

佩尔预测模型的优点包括:

能够精确地反映时间序列的趋势、季节性和随机性变化,能够为决策者提供更准确的预测结果。

方法多样,可以根据不同的数据进行选择,具有较高的适用性。

适用于处理非线性数据,可以处理具有强烈季节性和趋势变化的数据。

佩尔预测模型的缺点包括:

对于非稳定时间序列,需要进行平稳化处理,增加了预测的难度。

预测结果可能受到异常值的干扰,需要进行异常值处理。

参数的选择需要一定的经验和技巧,不当的选择可能会导致预测结果不准确

总结

佩尔预测模型是一种基于时间序列的预测模型,通过对历史数据进行分析,预测未来的趋势。它在经济、金融、管理等领域有广泛的应用,可以帮助决策者做出更准确的决策。该模型的优点包括精确反映时间序列的趋势、季节性和随机性变化,方法多样,适用性高,适合处理非线性数据;缺点包括对非稳定时间序列的平稳化处理、异常值的干扰和参数选择的难度。因此,在使用佩尔预测模型时需要注意数据的处理和参数的选择,以获得更准确的预测结果。

(2)第二步:数据准备,数据来源于课本例题。

请添加图片描述

年份 客运量 X1/万人 旅客周转量 X2/亿人千米 公路客运量 X3/万人 公路旅客周转量 X4/亿人千米
1987 10091 88.4 8552 59.9
1988 10551 93.46 8864 64.81
1989 10389 94.01 8928 97.66
1990 10702 87.67 9475 65.77
1991 11078 95.86 9880 71.83
1992 10565 99.98 9277 69.89
1993 11063 111.9 9528 73.38
1994 25163 146.87 23518 101.77
1995 21697 137.93 20095 93.1
1996 23904 149.94 22397.1 102.4
1997 25003.7 172.4 23437.9 119.5
1998 29863 189.85 28048 131.8
1999 32962.2 237.99 30796 164.2
2000 33704 237.94 31586 171.2
2001 39984.4 304.2 37909 232.76
2002 38879.6 281.6 36726 210.1
2003 35156 263.45 33039 192.87
2004 38902 317.76 36502 227.21
2005 41079 331.6 38509 233.12
2006 43844 362.4 40861 247.71

(3)第三步:使用 Python 编写实验代码并做图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 读取Excel数据
data = pd.read_excel('E:\\File\\class\\大三下\\数据挖掘\\test4.xlsx')
# 将x和y值转换为numpy数组
x = np.array(data['年份'])
y = np.array(data['客运量 X1/万人'])
# 计算趋势线
n = len(x)
trend = np.polyfit(np.arange(1, n+1), y, 1)
# 计算预测值
x_new = n + 2 # 预测的年份
y_new = trend[0] * x_new + trend[1]
print('2008年对应的客运量为:', y_new)
# 生成趋势线数据
trendline = trend[0] * np.arange(1, n+2) + trend[1]
# 绘制图形
plt.plot(np.arange(1, n+1), y, label='原始数据')
plt.plot(np.arange(1, n+3), np.append(trendline, y_new), label='趋势线')
plt.scatter(n+2, y_new, color='red', label='预测值')
plt.title('趋势外推预测模型(佩尔预测模型)案例')
plt.xlabel('年份')
plt.ylabel('客运量 X1/万人')
plt.legend()
plt.show()

代码解释:

上述代码是一个趋势外推预测模型(佩尔预测模型)的案例,主要功能是读取 Excel 数据,计算趋势线,预测未来客运量,并绘制数据图形。下面对每行代码进行详细解释:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

首先导入 pandas、numpy 和 matplotlib.pyplot 这三个库。

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

这一行代码是为了解决在 Matplotlib 中中文显示问题,设置中文字体为 SimHei。

data = pd.read_excel(‘E:\File\class\大三下\数据挖掘\test4.xlsx’)

读取数据文件 test4.xlsx,将其存储在 pandas 的 dataframe 中。

x = np.array(data[‘年份’])
y = np.array(data[‘客运量 X1/万人’])

将 dataframe 中的“年份”列和“客运量 X1/万人”列转换成 numpy 数组 x 和 y,方便后续计算。

n = len(x)
trend = np.polyfit(np.arange(1, n+1), y, 1)

利用 numpy 库中的 polyfit 函数计算出数据的趋势线,其中 np.arange(1, n+1) 生成了 1 到 n 的序列,用于拟合数据。1 指定了拟合的多项式的次数,这里指定为一次线性拟合。

x_new = n + 2 # 预测的年份
y_new = trend[0] * x_new + trend[1]
print(‘2008年对应的客运量为:’, y_new)

计算出在 2008 年的客运量,这里假设未来的客运量趋势与历史数据的趋势相同。y_new 计算了 2008 年对应的客运量。

trendline = trend[0] * np.arange(1, n+2) + trend[1]

生成趋势线数据,使用了 polyfit 计算出来的趋势线方程,即 y = kx + b,其中 k 是趋势线的斜率,b 是截距,np.arange(1, n+2) 生成了 1 到 n+1 的序列,用于绘制趋势线。

plt.plot(np.arange(1, n+1), y, label=‘原始数据’)
plt.plot(np.arange(1, n+3), np.append(trendline, y_new), label=‘趋势线’)
plt.scatter(n+2, y_new, color=‘red’, label=‘预测值’)
plt.title(‘趋势外推预测模型(佩尔预测模型)案例’)
plt.xlabel(‘年份’)
plt.ylabel(‘客运量 X1/万人’)
plt.legend()
plt.show()

绘制数据图形,包括原始数据的折线图、趋势线的折线图和预测值的散点图。其中:

plt.plot(np.arange(1, n+1), y, label=‘原始数据’) 绘制了原始数据的折线图。

plt.plot(np.arange(1, n+3), np.append(trendline, y_new), label=‘趋势线’) 绘制了趋势线的折线图。

plt.scatter(n+2, y_new, color=‘red’, label=‘预测值’) 绘制了预测值的散点图。

plt.title(‘趋势外推预测模型(佩尔预测模型)案例’) 设置了图形的标题。

plt.xlabel(‘年份’) 设置了 X 轴的标签。

plt.ylabel(‘客运量 X1/万人’) 设置了 Y 轴的标签。

plt.legend() 显示了图例。

plt.show() 展示了图形。

整个代码实现了一个基础的趋势外推预测模型,通过对历史数据的分析,找到数据的趋势线,再根据趋势线预测未来数据的变化趋势。同时,通过图形的绘制,让数据更加直观和易懂。

(4)第四步:实验结果。

绘图和预测2008年的客运量X1。

请添加图片描述

请添加图片描述

这里的预测结果为:48571.043759398526

实验总结

通过本次实验,我学习了趋势外推预测模型(佩尔预测模型)的基本原理和建立方法,了解了如何使用Python编程实现预测模型。同时,我们也使用了某省会全社会客运量预测实例,对趋势外推预测模型(佩尔预测模型)进行了实际应用和分析。在实验中,我掌握了数据预处理、模型训练和结果评估等关键技术,对于今后的数据分析和预测工作将有很大的帮助。同时在这个过程之中也出现了一些问题,但通过查阅相关资料最终这些问题都得以解决。在这个过程中我的动手实践能力的到提升,也让我明白了实际动手操作的重要性,在实际操作中可以发现很多平时发现不了的问题,通过实践最终都得以解决。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为你编写一个简单的趋势预测模型。这个模型将使用Python编写,并且需要一些时间序列数据来训练模型。 首先,我们需要安装并导入一个称为“pandas”和“matplotlib”的Python库,以处理和可视化时间序列数据。您可以使用以下命令安装这些库: ``` !pip install pandas matplotlib ``` 在安装这些库之后,我们现在可以加载我们的时间序列数据。在这里,我的荐是使用pandas库的“read_csv”函数来读取你的csv文件,并加载到一个pandas dataframe中。 ```python import pandas as pd # load the time series data into a pandas dataframe data = pd.read_csv('YOUR_CSV_FILE.csv', index_col=0) ``` 接下来,我们需要将数据集分成训练集和测试集。一般来说,训练集占数据集的大约70-80%,而测试集则占20-30%。在这里,我们将把前80%的数据用于训练,剩余的20%用于测试。我们还将使用一个可以将数据可视化的matplotlib库。 ```python import matplotlib.pyplot as plt # split the data into a training set and a testing set train_size = int(len(data) * 0.8) train, test = data[:train_size], data[train_size:] # plot the training and testing data to see how it looks plt.plot(train) plt.plot(test) plt.show() ``` 接下来,我们需要处理数据并为模型准备数据。我们将使用一个称为“sklearn.preprocessing”库的Python库来进行标准化数据处理。标准化是一种将数据处理为具有零均值和单位方差的过程。 ```python from sklearn.preprocessing import StandardScaler # normalize the training and testing data scaler = StandardScaler() train_scaled = scaler.fit_transform(train) test_scaled = scaler.transform(test) ``` 现在我们准备好训练模型了。对于这个模型,我们将使用一个查找“单指数平滑”概念的函数所获得的趋势线。这里我使用numpy库,但你也可以使用其他可用的库。 ```python import numpy as np # define a function to get the trend line using exponential smoothing def get_trend_line(train_data): alpha = 0.2 preds = np.zeros(len(train_data)) preds[0] = train_data[0] for i in range(1, len(train_data)): preds[i] = alpha * train_data[i] + (1 - alpha) * preds[i-1] return preds # get the trend line for the training data trend_line = get_trend_line(train_scaled) ``` 现在我们可以可视化我们的趋势,使它更好理解我们是怎么做的。 ```python plt.plot(train_scaled) plt.plot(trend_line) plt.show() ``` 最后,我们可以使用趋势线对我们的测试集进行,并可视化它: ```python # define a function to forecast future values using the trend line def forecast_trend_line(train_data, test_data): alpha = 0.2 preds = np.zeros(len(test_data)) preds[0] = alpha * train_data[-1] + (1 - alpha) * trend_line[-1] for i in range(1, len(preds)): preds[i] = alpha * test_data[i-1] + (1 - alpha) * preds[i-1] return preds # predict future values using the trend line test_preds = forecast_trend_line(train_scaled, test_scaled) # plot the actual testing data and the predicted values plt.plot(test_scaled) plt.plot(test_preds) plt.show() ``` 这就是一个简单的趋势预测模型的实现,希望可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路上阡陌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值