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

使用Darts库时静态协变量无法转浮点数的报错问题排查

问题原因分析

你的报错根源有三点:

  1. value_cols=['y']参数错误——你的数据集里目标列是volume,并非y,这会导致时间序列无法正确加载目标数值;
  2. 字符串类型的country被设为static_cols——底层的LinearRegression模型仅支持数值型特征,无法直接解析字符串类别,因此抛出无法转换为浮点数的错误;
  3. freq='MS'(月初频率)与你的日度数据不匹配,可能引发后续数据对齐问题,建议改为'D'(日度频率)。
解决办法

1. 修正目标列参数

将value_cols=['y']改为value_cols=['volume'],确保时间序列正确加载你的目标数据。

2. 编码类别型静态特征

需要把country这个类别型特征转换为数值型,以下是两种常用实现方式:

方式一:标签编码(Label Encoding)

适合类别数量少或存在有序关系的场景:

from sklearn.preprocessing import LabelEncoder
import pandas as pd
from darts import TimeSeries
from darts.models import RegressionModel
from sklearn.linear_model import LinearRegression

datasource = pd.read_csv('data/multivariate_test.csv', index_col=False)
df = pd.DataFrame(datasource)

# 转换日期格式并排序
df['date'] = pd.to_datetime(df['date'], dayfirst=True)
df.sort_values(by='date', inplace=True)
df.reset_index(drop=True, inplace=True)

# 对country进行标签编码
le = LabelEncoder()
df['country_encoded'] = le.fit_transform(df['country'])

# 创建时间序列,使用编码后的数值列作为静态特征
y = TimeSeries.from_group_dataframe(
    df,
    group_cols='country',
    static_cols='country_encoded',
    time_col='date',
    value_cols=['volume'],
    fill_missing_dates=False,
    freq='D'
)

# 注意:数据集仅2天数据,lags不能超过历史数据长度,这里调整为[-1,-2]
model = RegressionModel(lags=[-1,-2], model=LinearRegression())
model.fit(y)
y_pred = model.predict(n=12, series=y)

方式二:独热编码(One-Hot Encoding)

适合类别无顺序关系的场景,避免模型误判类别间存在大小关联:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd
from darts import TimeSeries
from darts.models import RegressionModel
from sklearn.linear_model import LinearRegression

datasource = pd.read_csv('data/multivariate_test.csv', index_col=False)
df = pd.DataFrame(datasource)

# 转换日期格式并排序
df['date'] = pd.to_datetime(df['date'], dayfirst=True)
df.sort_values(by='date', inplace=True)
df.reset_index(drop=True, inplace=True)

# 对country进行独热编码
ohe = OneHotEncoder(sparse_output=False)
encoded_countries = ohe.fit_transform(df[['country']])
encoded_df = pd.DataFrame(encoded_countries, columns=ohe.get_feature_names_out(['country']))
df = pd.concat([df, encoded_df], axis=1)

# 创建时间序列,使用所有独热编码列作为静态特征
y = TimeSeries.from_group_dataframe(
    df,
    group_cols='country',
    static_cols=encoded_df.columns.tolist(),
    time_col='date',
    value_cols=['volume'],
    fill_missing_dates=False,
    freq='D'
)

# 数据集仅2天数据,lags调整为[-1]
model = RegressionModel(lags=[-1], model=LinearRegression())
model.fit(y)
y_pred = model.predict(n=12, series=y)

额外提示

你的数据集仅有2天历史数据,lags参数设置不能超过现有数据的时间步长(比如[-12]会因无足够历史数据报错),需根据实际数据量调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:20:05