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

如何在Python中使用CTR作为因变量构建Logistic回归模型?

解决Logistic回归预测CTR的错误及建模方案

错误原因

你遇到的ValueError: Unknown label type: 'continuous',本质是用了连续数值型的CTR作为Logistic回归的因变量。Logistic回归是二元分类模型,只能接受0/1这样的二元标签(代表事件发生/不发生),而CTR是点击量/曝光量的比值,属于连续变量,不符合模型要求。

正确建模思路

Logistic回归的核心是预测单个曝光的点击概率(这个概率的期望就是CTR),所以要从原始点击/曝光数据入手,两种可行方案:

方案1:拆分单个曝光为样本(最标准)

把每一次曝光都作为独立样本,因变量设为1(该次曝光被点击)或0(未被点击),自变量保留广告位置、创意类型等特征。

比如一条数据是「曝光100次,点击5次」,就拆成100个样本:5个样本的y=1,95个样本的y=0,每个样本的特征和原数据一致。

代码示例:

from sklearn.linear_model import LogisticRegression
import pandas as pd

# 假设你的原始聚合数据
data = pd.DataFrame({
    'ad_position': [1, 2, 1, 3],
    'creative_type': [0, 1, 1, 0],
    'clicks': [5, 3, 8, 2],
    'impressions': [100, 80, 150, 60]
})

# 拆分每个曝光为单独样本
expanded_rows = []
for _, row in data.iterrows():
    # 添加点击样本
    expanded_rows.extend([{
        'ad_position': row['ad_position'],
        'creative_type': row['creative_type'],
        'clicked': 1
    }] * row['clicks'])
    # 添加未点击样本
    expanded_rows.extend([{
        'ad_position': row['ad_position'],
        'creative_type': row['creative_type'],
        'clicked': 0
    }] * (row['impressions'] - row['clicks']))

expanded_df = pd.DataFrame(expanded_rows)

# 训练模型
X = expanded_df[['ad_position', 'creative_type']]
y = expanded_df['clicked']
model = LogisticRegression()
model.fit(X, y)

# 预测单个曝光的点击概率
print(model.predict_proba([[1, 0]]))  # 输出格式:[[未点击概率, 点击概率]]

方案2:加权Logistic回归(高效处理聚合数据)

如果曝光量太大,拆分样本会导致内存溢出,可以用加权回归:

  • 保留聚合后的每条数据作为样本
  • 因变量用该组的CTR(点击量/曝光量)
  • 给每个样本设置权重,权重等于该组的曝光量(代表该样本对应多少个原始曝光)

数学上,这种加权方式和拆分样本的结果完全等价,但效率更高。

代码示例:

from sklearn.linear_model import LogisticRegression
import pandas as pd

data = pd.DataFrame({
    'ad_position': [1, 2, 1, 3],
    'creative_type': [0, 1, 1, 0],
    'clicks': [5, 3, 8, 2],
    'impressions': [100, 80, 150, 60]
})

# 构造特征、因变量和权重
X = data[['ad_position', 'creative_type']]
y = data['clicks'] / data['impressions']
sample_weights = data['impressions']

# 训练加权模型
model = LogisticRegression()
model.fit(X, y, sample_weight=sample_weights)

# 预测点击概率
print(model.predict_proba([[1, 0]]))

补充说明

Logistic回归输出的是单条曝光的点击概率,某组广告的CTR就是该组所有曝光点击概率的平均值,不需要直接把CTR当因变量建模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:38