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

构建评分预测分类器时,如何将两列作为自变量纳入分析

如何结合pricerange与pricecurrency作为分类器的自变量

一、先搞定基础数据类型转换

你的示例里pricerange、ratingvalue都是字符串格式,pricecurrency还混了数字和字符串,先统一转成模型能处理的规范类型:

import pandas as pd

df = pd.DataFrame({
     'ratingvalue': ['5.0', '4.5', '2.0'],
     'pricerange': ['10000000', '899', '200'],
    'pricecurrency': ['45', '15',  '20']
})

# 转换数据类型
df['ratingvalue'] = df['ratingvalue'].astype(float)
df['pricerange'] = df['pricerange'].astype(int)
df['pricecurrency'] = df['pricecurrency'].astype(str)  # 统一为字符串,避免混合类型问题

二、最优方案:把价格转成统一货币金额

不同货币的购买力天差地别,最合理的做法是将所有pricerange转换成同一种基准货币(比如USD)的实际价值,这样模型能直接用这个统一数值作为核心特征。

你需要先准备货币代码到汇率的映射(比如你说的45对应EUR、15对应USD,自己补充完整的汇率表):

# 示例:以USD为基准的汇率映射(1单位对应货币 = X USD)
currency_exchange = {
    '15': 1.0,    # USD本身
    '45': 1.09,   # EUR,假设1 EUR兑换1.09 USD
    '20': 0.0074  # 比如JPY,1 JPY兑换0.0074 USD
}

# 计算统一货币后的价格
df['normalized_price'] = df.apply(
    lambda row: row['pricerange'] / currency_exchange[row['pricecurrency']],
    axis=1
)

生成的normalized_price已经融合了原始价格和货币的影响,可以直接作为模型的自变量。

三、没有汇率数据时的替代方法

如果拿不到准确汇率,试试这两种方式:

1. 做交互特征

先把pricerange归一化(避免数值差距太大),再和货币编码相乘生成交互特征,同时保留货币本身的类别特征:

from sklearn.preprocessing import MinMaxScaler

# 归一化pricerange到0-1区间
scaler = MinMaxScaler()
df['pricerange_scaled'] = scaler.fit_transform(df[['pricerange']])

# 货币转成数值编码,生成交互特征
df['currency_code'] = df['pricecurrency'].astype(int)
df['price_currency_interact'] = df['pricerange_scaled'] * df['currency_code']

之后可以把price_currency_interact和pricecurrency(作为类别)一起喂给模型。

2. 按货币分组做价格分箱

把同一货币下的价格分成低、中、高几个区间,生成类别特征:

# 按货币分组,对价格做三分位分箱
df['price_bucket'] = df.groupby('pricecurrency')['pricerange'].transform(
    lambda x: pd.qcut(x, q=3, labels=['low', 'medium', 'high'])
)

这个price_bucket能体现同货币下的价格档位,再搭配pricecurrency一起编码后输入模型。

四、最后整理成模型可用的特征

  • 数值特征(比如normalized_price)直接用就行
  • 类别特征(比如pricecurrency、price_bucket)需要做编码,比如独热编码(适合线性模型)或者直接留原编码(适合树模型)

示例独热编码处理:

# 对类别特征做独热编码,drop_first避免多重共线性
encoded_cats = pd.get_dummies(df[['pricecurrency', 'price_bucket']], drop_first=True)

# 合并所有特征
final_features = pd.concat([df[['normalized_price']], encoded_cats], axis=1)

之后就用final_features当自变量,ratingvalue(如果是分类任务要先转成类别,比如高/中/低评分)当因变量训练分类器就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:01