XGBoost预测模型训练10分钟跑通

  1. 安装python,以及相关库:
python.exe -m pip install --upgrade pip #可以先更新pip版本,非必要
pip install pandas scikit-learn xgboost joblib
  1. 训练模型,提前准备数据,excel/csv格式
    表头数据:
    A stat_cost 消耗金额
    B show_cnt 展示数
    C click_cnt 点击数
    D convert_cnt 转化数
    E arpu ARPU值,充值/消耗
    F money 充值金额
    G roi roi
    H ctr 点击率,点击数/展示数100%
    I convert_rate 转化率,转化数/点击数
    100%
    J active_rate 激活率,激活数/点击数*100%
    在这里插入图片描述
    K列是优化动作,需要打好动作标签,如果数据没有,那么就自己打,不然只有数据,没有动作。
    我打的标签规则是:
    标签 ID 优化动作名称 触发规则
    0 优化素材 / 文案 ctr(点击率)<0.3%(提高了原 0.2% 的阈值,减少该标签出现频率)
    1 优化落地页 / 转化链路 ctr≥0.3% 且 convert_rate(转化率)<20%
    2 收缩定向(减少无效流量) roi<1.0(原 0.9)且 active_rate(激活率)<60%(原 50%)
    3 扩大流量(提高出价 / 放宽定向) show_cnt(展示数)<1000 且 roi≥1.2(原 1)
    4 无需调整 所有指标达标(ctr≥0.3%、convert_rate≥20%、roi≥1.2 等)
    如果你只有数据,没有动作,就先手动打标签训练模型,我使用python处理excel给K列打标签:
import pandas as pd

# 加载数据
df = pd.read_csv('/mnt/data.csv')

# 定义函数,根据调整后的规则返回对应的标签
def get_label(row):
    # 提高点击率阈值到 0.3%,减少标签 0 的出现
    if row['ctr'] < 0.3:
        return 0
    elif row['ctr'] >= 0.3 and row['convert_rate'] < 20:
        return 1
    # 调整 roi 和 active_rate 的阈值组合
    elif row['roi'] < 1.0 and row['active_rate'] < 60:
        return 2
    elif row['show_cnt'] < 1000 and row['roi'] >= 1.2:
        return 3
    return 4

# 应用函数,添加标签列
df['标签'] = df.apply(get_label, axis=1)

# 查看标签分布
label_distribution = df['标签'].value_counts()
print('标签分布:')
print(label_distribution)

# 将结果保存为 csv 文件
csv_path = '/mnt/data_labeled_adjusted.csv'
df.to_csv(csv_path)

执行上面训练模型代码,接下来,我将使用带标签的数据 data.csv 训练一个随机森林分类模型,并将训练好的模型保存下来,以便后续对新的广告数据进行预测。
执行python train_model.py 最后生成两个文件:

  1. label_encoder.pkl 是生成的 标签编码器
  2. 广告优化模型_XGBoost.pkl 是训练出来的 模型文件
    在这里插入图片描述
  3. 后续你可以使用这个模型对新的广告数据进行预测,具体操作如下:
import pandas as pd
import joblib
import numpy as np

# 加载模型
loaded_model = joblib.load('C:/Users/zhagnshi/Desktop/moxing/py/广告优化模型_XGBoost.pkl')  # 根据实际路径修改
label_encoder = joblib.load('C:/Users/zhagnshi/Desktop/moxing/py/label_encoder.pkl')  # 根据实际路径修改

# 准备新的广告数据(示例)
new_ad_data = pd.DataFrame({
   'stat_cost': [100.0],
   'show_cnt': [1500],
   'click_cnt': [10],
   'convert_cnt': [2],
   'arpu': [5.0],
   'money': [100.0],
   'roi': [1.5],
   'ctr': [0.67],
   'convert_rate': [20.0],
   'active_rate': [50.0]
})

# 进行预测
prediction_encoded = loaded_model.predict(new_ad_data)
prediction = label_encoder.inverse_transform(prediction_encoded)

print('预测结果:', prediction)

调用模型进行预测

python predict_model.py
  1. 增量训练模型
    正确的 “增量训练” 操作(针对 scikit-learn 接口的 XGBoost 模型)
    如果你是用joblib保存的.pkl模型(即XGBClassifier),增量训练的正确步骤如下:
    用joblib加载已保存的模型
import joblib
import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 1. 加载用joblib保存的XGBClassifier模型
model = joblib.load('C:/Users/zhagnshi/Desktop/moxing/py/广告优化模型_XGBoost.pkl')

# 2. 加载新数据(和之前的特征、标签格式一致)
new_df = pd.read_csv('new_data.csv')  # 你的新广告数据
X_new = new_df[['stat_cost','show_cnt', 'click_cnt', 'convert_cnt', 'arpu','money', 'roi', 'ctr', 'convert_rate', 'active_rate']]
y_new = new_df['标签']  # 新数据的标签(按你的规则打好的)

# 3. 对标签编码(如果之前编码过,需用同一个LabelEncoder)
# 注意:必须加载之前保存的LabelEncoder,不能重新初始化!
label_encoder = joblib.load('C:/Users/zhagnshi/Desktop/moxing/py/label_encoder.pkl')
y_new_encoded = label_encoder.transform(y_new)  # 用已有的编码器转换新标签

# 4. 增量训练(在新数据上继续训练)
model.fit(
    X_new, 
    y_new_encoded,
    verbose=False  # 不输出训练日志,可选
)

# 5. 保存更新后的模型
joblib.dump(model, 'C:/Users/zhagnshi/Desktop/moxing/py/广告优化模型_XGBoost_updated.pkl')

为什么这样可行?
XGBClassifier的fit方法默认会 “累加训练”:第一次训练是从 0 开始,后续调用fit会在已有模型的基础上,用新数据继续优化参数,实现增量训练。
必须用同一个LabelEncoder 处理新标签:否则标签编码不一致会导致模型混乱(比如原来的 “0” 代表 “优化素材”,新编码器可能把 “0” 对应别的动作)。
总结:避免报错的核心
用joblib.save保存的模型 → 必须用joblib.load加载。
用model.save_model()保存的原生模型 → 必须用Booster.load_model()加载。
按上面的步骤操作,就能基于新数据增量优化模型了。如果还有问题(比如新数据格式不对),可以把具体报错发给我,我再帮你调~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值