时间序列学习2:趋势

trend:模型随着移动平均值和time dummy的变化

1.什么是趋势?
时间序列的趋势分量代表序列均值的持续(presistent)、长期变化(long-term change)。趋势是一系列中移动最慢的部分,代表了最大时间尺度的重要性。在产品销售的时间序列中,随着越来越多的人逐年意识到该产品,市场扩张的影响可能是增加趋势。
更一般地说,一个序列中任何持续且缓慢移动的变化都可能构成一种趋势——例如,时间序列通常在其变化中具有趋势。
2.移动平均线图(moving average plots)
sliding window
要查看时间序列可能具有什么样的趋势,我们可以使用移动平均图。为了计算时间序列的移动平均值,我们计算某个定义宽度的滑动窗口内的值的平均值。图表上的每个点代表位于任一侧窗口内的系列中所有值的平均值。这个想法是为了消除序列中的任何短期波动,以便只保留长期变化
3.Engineering Trend
一旦我们确定了趋势的形状,我们就可以尝试使用时间步长特征(time-step feature)对其进行建模。
我们已经看到如何使用时间虚拟模型本身来模拟线性趋势:

target = a*time +b

fit many other kinds of trend through transformations of the time dummy.
我们可以通过时间伪造的转换来融合许多其他类型的趋势。如果趋势似乎是二次(抛物线),我们只需要将时间伪装的平方添加到功能集中,给我们:

target = a * time**2 + b* time + c

使用scikit-learn’s 中的LinearRegression

3.例子:Tunnel Traffic
真是一个大工程呀
对商店销售趋势建模并了解使用高阶多项式进行预测的风险。
(1)让我们做一个移动平均线图,看看这个系列有什么样的趋势。由于这个系列有每日观察,让我们选择一个 365 天的窗口来平滑一年内的任何短期变化。要创建移动平均线,首先使用(rolling)滚动方法开始窗口计算。按照这个方法计算窗口的平均值。正如我们所看到的,隧道流量的趋势似乎是线性的。

  • tunnel.rolling()

  • tunnel.plot()
    (2)在1中,我们直接在 Pandas 中设计了我们的时间虚拟机。然而,从现在开始,我们将使用 statsmodels 库中的一个名为DeterministicProcess 的函数。使用这个函数将帮助我们避免一些棘手的失败案例,这些案例可能会随着时间序列和线性回归而出现。 order 参数是指多项式顺序:1 表示线性,2 表示二次,3 表示三次,依此类推。

  • DeterministicProcess

from statsmodel.tsa.deterministic import DeterministicProcess

(3)预测模型

from sklearn.linear_model import LinearRegression

我们的线性回归模型发现的趋势几乎与移动平均图相同,这表明在这种情况下线性趋势是正确的决定。
为了进行预测,我们将模型应用于“样本外”特征。 “样本外”是指训练数据的观察期之外的时间。

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用LSTM进行时间序列分类的代码示例: ```python import numpy as np from keras.models import Sequential from keras.layers import LSTM, Dense # 生成时间序列数据 def generate_data(n): X = np.zeros((n, 10)) y = np.zeros((n, 1)) for i in range(1, n): if X[i-1,0] == 0: # 第一个时间步的值随机生成 X[i, 0] = np.random.randn() else: # 根据前一个时间步的值生成下一个时间步的值 X[i, 0] = X[i-1, 0] + np.random.randn()*0.1 # 根据时间序列趋势对数据进行分类 if X[i, 0] > X[i-1, 0]: y[i] = 1 return X, y # 构建LSTM模型 model = Sequential() model.add(LSTM(32, input_shape=(10, 1))) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 生成训练数据 X_train, y_train = generate_data(1000) X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) # 训练模型 model.fit(X_train, y_train, epochs=10) # 生成测试数据 X_test, y_test = generate_data(100) X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1)) # 评估模型 loss, accuracy = model.evaluate(X_test, y_test) print('Test loss:', loss) print('Test accuracy:', accuracy) ``` 这个例子中,我们生成了1000个时间步的时间序列数据。每个时间步包含一个值,并且相邻时间步的值之间存在一定的趋势关系。我们将时间序列趋势作为分类标签,使用LSTM模型对数据进行训练和分类。最后,我们生成100个测试数据进行评估。运行代码后,输出的结果包括测试集上的损失和准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值