1. 合成面板数据


来源

generate_series

 generate_series (n_series:int, freq:str='D', min_length:int=50,
                  max_length:int=500, n_temporal_features:int=0,
                  n_static_features:int=0, equal_ends:bool=False,
                  seed:int=0)

*生成合成面板序列。

生成 n_series 个具有 freq 频率且长度在 [min_length, max_length] 区间内的不同长度序列。如果 n_temporal_features > 0,则每个序列都带有随机值的时态特征。如果 n_static_features > 0,则与时态 DataFrame 一起返回静态 DataFrame。如果 equal_ends == True,则所有序列在同一日期戳 ds 结束。

参数
n_series: int, 合成面板的序列数量。
min_length: int, 合成面板序列的最小长度。
max_length: int, 合成面板序列的最大长度。
n_temporal_features: int, default=0, 合成面板序列的时态外部变量数量。
n_static_features: int, default=0, 合成面板序列的静态外部变量数量。
equal_ends: bool, 如果为 True,则序列在同一日期戳 ds 结束。
freq: str, 数据的频率,panda 可用的频率别名

返回值
freq: pandas.DataFrame, 带有列 [unique_id, ds, y] 和外部变量的合成面板。

synthetic_panel = generate_series(n_series=2)
synthetic_panel.groupby('unique_id').head(4)
temporal_df, static_df = generate_series(n_series=1000, n_static_features=2,
                                         n_temporal_features=4, equal_ends=False)
static_df.head(2)

2. AirPassengers 数据

经典的 Box & Jenkins 航空数据。1949 年至 1960 年国际航班乘客的月度总量。

它已被用作多个预测库的参考,因为它是一个显示明显趋势和季节性的序列,提供了一个很好的机会来快速展示模型的预测性能。

AirPassengersDF.head(12)
#We are going to plot the ARIMA predictions, and the prediction intervals.
fig, ax = plt.subplots(1, 1, figsize = (20, 7))
plot_df = AirPassengersDF.set_index('ds')

plot_df[['y']].plot(ax=ax, linewidth=2)
ax.set_title('AirPassengers Forecast', fontsize=22)
ax.set_ylabel('Monthly Passengers', fontsize=20)
ax.set_xlabel('Timestamp [t]', fontsize=20)
ax.legend(prop={'size': 15})
ax.grid()
import numpy as np
import pandas as pd
n_static_features = 3
n_series = 5

static_features = np.random.uniform(low=0.0, high=1.0, 
                        size=(n_series, n_static_features))
static_df = pd.DataFrame.from_records(static_features, 
                   columns = [f'static_{i}'for i in  range(n_static_features)])
static_df['unique_id'] = np.arange(n_series)
static_df

3. 面板 AirPassengers 数据

经典 Box & Jenkins 航空数据的扩展。1949 年至 1960 年国际航班乘客的月度总量。

它包括两个序列,带有静态、时态和未来外部变量,这有助于探索 NBEATSxTFT 等模型的性能。

fig, ax = plt.subplots(1, 1, figsize = (20, 7))
plot_df = AirPassengersPanel.set_index('ds')

plot_df.groupby('unique_id')['y'].plot(legend=True)
ax.set_title('AirPassengers Panel Data', fontsize=22)
ax.set_ylabel('Monthly Passengers', fontsize=20)
ax.set_xlabel('Timestamp [t]', fontsize=20)
ax.legend(title='unique_id', prop={'size': 15})
ax.grid()
fig, ax = plt.subplots(1, 1, figsize = (20, 7))
plot_df = AirPassengersPanel[AirPassengersPanel.unique_id=='Airline1'].set_index('ds')

plot_df[['y', 'trend', 'y_[lag12]']].plot(ax=ax, linewidth=2)
ax.set_title('Box-Cox AirPassengers Data', fontsize=22)
ax.set_ylabel('Monthly Passengers', fontsize=20)
ax.set_xlabel('Timestamp [t]', fontsize=20)
ax.legend(prop={'size': 15})
ax.grid()

4. 时间特征

我们开发了一个实用工具,可以生成标准化的日历特征,用作基于 Transformer 的模型中的绝对位置编码。这些编码捕捉了时间序列数据中的季节性模式,可以轻松地整合到模型架构中。此外,这些特征可用作其他模型中的外部变量,以告知它们数据中的日历模式。

参考文献
- Haoyi Zhou, Shanghang Zhang, Jieqi Peng, Shuai Zhang, Jianxin Li, Hui Xiong, Wancai Zhang. “Informer: 超越高效 Transformer 的长序列时间序列预测”


来源

augment_calendar_df

 augment_calendar_df (df, freq='H')

*> * Q - [月] > * M - [月] > * W - [月中日, 年中周] > * D - [周中日, 月中日, 年中日] > * B - [周中日, 月中日, 年中日] > * H - [一天中的小时, 周中日, 月中日, 年中日] > * T - [一小时中的分钟*, 一天中的小时, 周中日, 月中日, 年中日] > * S - [一分钟中的秒, 一小时中的分钟, 一天中的小时, 周中日, 月中日, 年中日] *分钟返回一个从 0-3 的数字,对应于其落入的 15 分钟时段。*


来源

time_features_from_frequency_str

 time_features_from_frequency_str (freq_str:str)

返回一个时间特征列表,适用于给定的频率字符串。 参数 ———- freq_str 频率字符串,格式为 [倍数][粒度],例如 “12H”、“5min”、“1D” 等。


来源

WeekOfYear

 WeekOfYear ()

一年中的周,编码为 [-0.5, 0.5] 之间的值


来源

MonthOfYear

 MonthOfYear ()

一年中的月,编码为 [-0.5, 0.5] 之间的值


来源

DayOfYear

 DayOfYear ()

一年中的日,编码为 [-0.5, 0.5] 之间的值


来源

DayOfMonth

 DayOfMonth ()

一个月中的日,编码为 [-0.5, 0.5] 之间的值


来源

DayOfWeek

 DayOfWeek ()

一天中的小时,编码为 [-0.5, 0.5] 之间的值


来源

HourOfDay

 HourOfDay ()

一天中的小时,编码为 [-0.5, 0.5] 之间的值


来源

MinuteOfHour

 MinuteOfHour ()

一小时中的分钟,编码为 [-0.5, 0.5] 之间的值


来源

SecondOfMinute

 SecondOfMinute ()

一小时中的分钟,编码为 [-0.5, 0.5] 之间的值


来源

TimeFeature

 TimeFeature ()

初始化自身。有关准确签名,请参阅 help(type(self))。

AirPassengerPanelCalendar, calendar_cols = augment_calendar_df(df=AirPassengersPanel, freq='M')
AirPassengerPanelCalendar.head()
plot_df = AirPassengerPanelCalendar[AirPassengerPanelCalendar.unique_id=='Airline1'].set_index('ds')
plt.plot(plot_df['month'])
plt.grid()
plt.xlabel('Datestamp')
plt.ylabel('Normalized Month')
plt.show()

来源

get_indexer_raise_missing

 get_indexer_raise_missing (idx:pandas.core.indexes.base.Index,
                            vals:List[str])

5. 预测区间


来源

PredictionIntervals

 PredictionIntervals (n_windows:int=2,
                      method:str='conformal_distribution')

用于存储预测区间元数据信息的类。


来源

add_conformal_distribution_intervals

 add_conformal_distribution_intervals (model_fcsts:<built-
                                       infunctionarray>, cs_df:~DFType,
                                       model:str, cs_n_windows:int,
                                       n_series:int, horizon:int, level:Op
                                       tional[List[Union[int,float]]]=None
                                       , quantiles:Optional[List[float]]=N
                                       one)

根据一致性分数 cs_dffcst_df 添加一致性区间。level 应该已经排序。此策略基于误差创建预测路径,并使用这些路径计算分位数。


来源

add_conformal_error_intervals

 add_conformal_error_intervals (model_fcsts:<built-infunctionarray>,
                                cs_df:~DFType, model:str,
                                cs_n_windows:int, n_series:int,
                                horizon:int, level:Optional[List[Union[int
                                ,float]]]=None,
                                quantiles:Optional[List[float]]=None)

根据一致性分数 cs_dffcst_df 添加一致性区间。level 应该已经排序。此策略基于绝对误差创建预测区间。


来源

get_prediction_interval_method

 get_prediction_interval_method (method:str)

来源

quantiles_to_level

 quantiles_to_level (quantiles:List[float])

将分位数列表转换为置信水平列表。


来源

level_to_quantiles

 level_to_quantiles (level:List[Union[int,float]])

将置信水平列表转换为分位数列表。