如何处理时间序列的缺失数据

您是否应该删除、插入或估算?

img

世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉:

df.info()

看到类似这样的内容:

img

大多数 ML 模型无法处理 NaN 或空值,因此如果您的特征或目标包含这些值,则在尝试将模型拟合到数据之前对它们进行适当处理非常重要。

在本文中,我将探讨处理时间序列数据集中的空值/缺失数据的 3 种简单方法。

1. 删除空值

这可能是处理缺失数据最简单、最直接的方法:将其删除。

# 删除所有列中
所给参考引用中未提及时间序列数据缺失的处理方法。一般常见的时间序列数据缺失处理方法有以下几种: ### 插值法 - **线性插值**:假设在两个已知数据点之间,数据呈线性变化。例如,已知时间点 $t_1$ 和 $t_2$ 对应的值分别为 $y_1$ 和 $y_2$,要估计时间点 $t$($t_1 < t < t_2$)的值 $y$,则可根据线性关系 $y = y_1+\frac{(y_2 - y_1)(t - t_1)}{t_2 - t_1}$ 计算。 ```python import numpy as np import pandas as pd # 创建包含缺失值时间序列 data = [10, np.nan, 30, 40] time_index = pd.date_range(start='2024-01-01', periods=4, freq='D') ts = pd.Series(data, index=time_index) # 线性插值 ts_interpolated = ts.interpolate(method='linear') print(ts_interpolated) ``` - **样条插值**:使用多项式样条函数来拟合数据点之间的曲线,能更好地捕捉数据的局部变化特征。 ```python # 样条插值 ts_spline_interpolated = ts.interpolate(method='spline', order=2) print(ts_spline_interpolated) ``` ### 填充法 - **前向填充**:使用前一个非缺失值来填充当前的缺失值。这种方法简单直接,但可能会导致数据的滞后性。 ```python # 前向填充 ts_ffilled = ts.fillna(method='ffill') print(ts_ffilled) ``` - **后向填充**:使用后一个非缺失值来填充当前的缺失值。 ```python # 后向填充 ts_bfilled = ts.fillna(method='bfill') print(ts_bfilled) ``` ### 模型法 - **基于机器学习模型**:可以使用回归模型(如线性回归、随机森林回归等),将有值的时间点数据作为特征,预测缺失点的值。 ```python from sklearn.ensemble import RandomForestRegressor # 提取有值和缺失值的索引 non_missing_index = ts[~ts.isna()].index missing_index = ts[ts.isna()].index # 准备训练数据 X_train = np.array([i for i, _ in enumerate(ts[non_missing_index])]).reshape(-1, 1) y_train = ts[non_missing_index].values # 训练随机森林模型 model = RandomForestRegressor() model.fit(X_train, y_train) # 准备测试数据 X_test = np.array([i for i, _ in enumerate(ts[missing_index])]).reshape(-1, 1) # 预测缺失值 y_pred = model.predict(X_test) # 填充缺失值 ts_model_filled = ts.copy() ts_model_filled[missing_index] = y_pred print(ts_model_filled) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茶桁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值