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

如何用Python实现趋势预测?基于Pandas时间序列数据

如何用Python/Pandas预测非均匀间隔时间序列的未来数值

当然可以搞定!针对你这种时间间隔不均匀的定量时间序列数据(比如那100条体重记录),Python结合Pandas有不少实用的方案,我给你拆解下具体怎么做:

第一步:先把数据理清楚(预处理)

首先得确保Pandas能正确识别你的日期列,这是时间序列处理的基础:

  • 转换日期列格式:用pd.to_datetime()把字符串格式的日期转成datetime类型,比如:
    df['record_date'] = pd.to_datetime(df['record_date'])
    
  • (可选但推荐)把日期设为索引并排序:这样后续处理时间序列会更顺手,代码如下:
    df = df.set_index('record_date').sort_index()
    

第二步:选择适合非均匀时间序列的预测模型

传统的ARIMA类模型更适合均匀间隔的数据,你的情况推荐下面两个工具:

1. Facebook Prophet(最适合日常记录场景)

Prophet专门为非均匀时间序列设计,自带趋势、季节性捕捉能力,还能自动处理异常值,对新手友好,非常适合体重、消费这种日常记录的数据。

代码示例:

# 先安装依赖
# pip install prophet

from prophet import Prophet

# Prophet要求列名必须是`ds`(日期)和`y`(数值),所以先重命名你的列
prophet_df = df.reset_index().rename(columns={'record_date': 'ds', 'weight': 'y'})

# 初始化并训练模型
model = Prophet()
model.fit(prophet_df)

# 构造要预测的未来时间点:
# 如果你想预测时间点X之后的下一个记录,比如X是'2024-05-01',可以手动指定时间点,或者按平均间隔生成
# 方式一:手动指定未来日期
future = pd.DataFrame({'ds': pd.to_datetime(['2024-05-02'])})
# 方式二:根据历史平均间隔生成(比如历史平均每3天记录一次,就生成X后3天的日期)
# avg_days = df.index.to_series().diff().mean().days
# future_date = pd.to_datetime('2024-05-01') + pd.Timedelta(days=avg_days)
# future = pd.DataFrame({'ds': [future_date]})

# 执行预测
forecast = model.predict(future)

# 提取结果:yhat是预测值,yhat_lower/yhat_upper是置信区间
predicted_result = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(1)
print(predicted_result)

2. 高斯过程回归(GPR,适合需要不确定性量化的场景)

如果你的数据有明显的非线性趋势,而且想知道预测结果的不确定性(比如体重预测的误差范围),可以用高斯过程回归。它能直接处理非均匀时间点,只需要把日期转换成数值特征(比如从第一条记录开始的天数)。

代码示例:

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

# 把日期转换成数值特征:计算每条记录距离第一条记录的天数
df['days_since_first'] = (df.index - df.index[0]).days

# 准备特征和目标变量
X = df[['days_since_first']].values
y = df['weight'].values

# 定义核函数(RBF适合拟合非线性趋势)
kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2))
gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)

# 训练模型
gpr.fit(X, y)

# 预测时间点X之后的下一个时间点:比如X是'2024-05-01',计算它对应的天数,再加平均间隔
target_date = pd.to_datetime('2024-05-02')
target_days = (target_date - df.index[0]).days

# 执行预测,同时获取标准差(代表不确定性)
y_pred, sigma = gpr.predict([[target_days]], return_std=True)
print(f"预测体重: {round(y_pred[0], 2)}kg,预测误差范围: ±{round(sigma[0], 2)}kg")

一些实用小提示

  • 处理异常值:如果数据里有明显离谱的数值(比如某天体重突然从70kg变100kg),可以先截断或者删除,比如用分位数截断:
    df['weight'] = df['weight'].clip(lower=df['weight'].quantile(0.05), upper=df['weight'].quantile(0.95))
    
  • 季节性捕捉:如果你的数据有周期性规律(比如周末体重波动大),Prophet会自动识别;用GPR的话,可以额外加入星期几、月份这类特征来提升效果。
  • 时间点选择:如果记录间隔完全无规律,可以先计算历史平均间隔,再用这个间隔来确定未来的预测时间点,比如:
    avg_interval = df.index.to_series().diff().dropna().mean().days
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:36