我想使用 XGBoost 构建一个多输出模型,其中如果联系了客户,则输出是预测销售,例如:
我的数据如下所示:
地区 | 销售类别 | 在线客户 | 已联系 | 销售 |
---|---|---|---|---|
北 | 3 | 1 | 1 | 1000 |
北 | 2 | 0 | 0 | 600 |
东 | 2 | 0 | 1 | 500 |
我打算将 Contacted 和 Sales 组合在一起,形成两个目标列,如下所示:
地区 | 销售类别 | 在线客户 | 联系_销售 | 非接触式_销售 |
---|---|---|---|---|
北 | 3 | 1 | 1000 | 0 |
北 | 2 | 0 | 0 | 600 |
东 | 2 | 0 | 500 | 0 |
这是正确的做法吗?零会扰乱模型训练并降低模型的准确性吗?将模型与一个预测联系销售和一个预测非接触销售分开的更好方法是吗?
我不认为你的方法是正确的,因为你正在做的是用 0 填充目标变量中的缺失值,这是不建议的。
我认为第二种拥有两个独立模型的方法很好,但是只有当你有足够的数据时,并且你需要考虑管理两个模型的复杂性。
我的建议是使用以下方法训练一个模型:
Sale
作为目标X_variables
(Region
、SaleCategory
和 OnlineCustomer
)和 Contacted
作为输入对于预测,如果您的数据如下所示:
X_变量 | 已联系 |
---|---|
北、3、1 | 1 |
北, 2, 0 | 0 |
东, 2, 0 | 1 |
您可以复制每一行以在
Contacted
中包含 1 和 0:
X_变量 | 已联系 |
---|---|
北、3、1 | 1 |
北、3、1 | 0 |
北, 2, 0 | 0 |
北, 2, 0 | 1 |
东, 2, 0 | 1 |
东, 2, 0 | 0 |
然后使用您的模型进行预测:
X_变量 | 已联系 | 销售 |
---|---|---|
北、3、1 | 1 | 1000 |
北、3、1 | 0 | 500 |
北, 2, 0 | 0 | 800 |
北, 2, 0 | 1 | 1200 |
东, 2, 0 | 1 | 600 |
东, 2, 0 | 0 | 950 |
然后将其转换为所需的输出:
X_变量 | 联系_销售 | 非接触式_销售 |
---|---|---|
北、3、1 | 1000 | 500 |
北, 2, 0 | 1200 | 800 |
东, 2, 0 | 600 | 950 |