You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用与原始数据形态相似的合成数据填充Pandas时间序列缺口?

时间序列缺口的合成数据填充方案

针对传统插值无法保留数据噪声与形态的问题,以下几个工具库可以生成贴合原数据特征的合成数据:

1. TimeSynth(专用合成时间序列库)

专注于生成符合特定统计特征的时间序列,你可以先分析原数据的趋势、周期、噪声分布(均值、方差、噪声类型),再生成匹配特征的序列填充缺口。

示例代码:

import timesynth as ts
import pandas as pd

# 按缺口时长生成时间采样点
time_sampler = ts.TimeSampler(stop_time=len(df.loc[df['value'].isna()]))
regular_time_samples = time_sampler.sample_regular_time(num_points=df['value'].isna().sum())

# 匹配原数据的趋势与噪声特征
trend = ts.trends.LinearTrend(slope=df['value'].dropna().diff().mean(), intercept=df['value'].dropna().iloc[-1])
noise = ts.noise.GaussianNoise(std=df['value'].dropna().std())
ts_generator = ts.TimeSeries(trend=trend, noise=noise)
samples, _, _ = ts_generator.sample(regular_time_samples)

# 填充缺口
df.loc[df['value'].isna(), 'value'] = samples

2. Prophet(适配趋势与周期性波动)

Facebook开源工具,擅长捕捉时间序列的趋势与周期性,用缺口前后的有效数据训练模型后,预测的缺口值会自带与原数据类似的波动,而非平滑曲线。

示例代码:

from prophet import Prophet
import pandas as pd

# 转换为Prophet要求的格式
train_df = df[~df['value'].isna()].rename(columns={'timestamp': 'ds', 'value': 'y'})
model = Prophet(yearly_seasonality=True, weekly_seasonality=True)
model.fit(train_df)

# 生成缺口区间的时间序列
gap_count = df['value'].isna().sum()
future = model.make_future_dataframe(periods=gap_count, freq='H')  # 根据数据时间频率调整freq
forecast = model.predict(future)

# 提取预测值填充缺口
gap_timestamps = df[df['value'].isna()]['timestamp']
df.loc[df['value'].isna(), 'value'] = forecast.loc[forecast['ds'].isin(gap_timestamps), 'yhat'].values

3. Statsmodels ARIMA/SARIMA(保留自相关特性)

如果数据存在明显的自相关性(前后时刻值关联紧密),用ARIMA/SARIMA拟合原数据的自相关结构,生成的预测值能保留原数据的波动模式。

示例代码:

import statsmodels.api as sm
import pandas as pd

# 处理为规整时间序列
ts_data = df['value'].dropna().asfreq('H')  # 调整频率匹配你的数据
# 根据ACF/PACF图确定p,d,q参数,示例用(1,1,1)
model = sm.tsa.ARIMA(ts_data, order=(1, 1, 1))
results = model.fit()

# 预测缺口区间
gap_start = df[df['value'].isna()].index[0]
gap_end = df[df['value'].isna()].index[-1]
forecast = results.predict(start=gap_start, end=gap_end)

# 填充缺口
df.loc[gap_start:gap_end, 'value'] = forecast.values

额外建议

  • 先对原数据做时序分解(用statsmodels.tsa.seasonal.seasonal_decompose),拆分趋势、季节、残差项,分别生成对应部分再合并,能进一步提升合成数据的贴合度。
  • 生成前务必分析原数据的核心特征:趋势类型(线性/非线性)、周期规律、噪声分布、自相关系数,确保生成的序列与原数据统计特性一致。

内容的提问来源于stack exchange,提问作者ortunoa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:17:51