繁体   English   中英

为电子商务客户/订单模型训练机器学习模型

[英]Training machine learning model for ecommerce customer/orders models

我有以下数据集:

| customer | item | number_of_orders |
|    1     |  1   |         1        |
|    1     |  2   |         0        |
|    1     |  3   |         0        |
|    1     |  4   |         1        |
|    2     |  1   |         0        |
|    2     |  2   |         0        |
|    2     |  3   |         0        |
|    2     |  4   |         1        |
...

我试图得出结论,如果用户 X 将订购项目 Y 作为第一步。

这是我到目前为止的代码

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

from sklearn.neighbors import KNeighborsClassifier

model = KNeighborsClassifier(n_neighbors=3)

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=7)

model.fit(X_train, Y_train)
predictions = model.predict(X_test)
result = accuracy_score(Y_test, predictions)
result

它提供了非常高的准确性,但我怀疑它与number_of_orders数据集中的大量零有关。

有人可以建议如何改进这个 ML 模型吗?

我也有关于价格和商品数量以及每件商品的平均价格的信息,我也想使用这些信息。

我的最终目标是根据这些数据创建一个推荐系统,根据其他订单返回推荐列表。

首先,我建议将您的评估方法更改为加权 F1 分数https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html - 确保选择“加权”选项以解决标签不平衡问题. 这个分数非常适合您的问题。

其次,我会尝试一些其他模型,KNN 是一个好的开始,但它可能无法找到合适的决策边界来分离您的问题。 也许尝试随机森林和/或新的 histgradientboostingclassifier(类似于 lightgbm 方法)。

您也可以尝试重新表述您的问题并尝试将其解决为推荐问题,也许您可​​以使用一些矩阵分解技术,这似乎非常有用,因为您发布的格式中的数据通常非常稀疏(很多 0)。

那里可能有很多零! 使用下面的一小段代码示例来查找数据集中零的百分比。

df_missing = df.isna()
df_num_missing = df_missing.sum()
print(df_num_missing / len(df))
print(df.isna().mean().round(4) * 100)

我不知道您的阈值是多少,但我推测如果 50% 或更多为零,那将是一个非常无用的功能。 您可以采用非零记录的子集。

df.drop(df[df['number_of_orders'] == 0].index,inplace=True)

试试看,看看你们相处得如何。 另外,试试其他人的建议。 一些算法在处理零、空值等方面非常聪明。我相信随机森林(回归和分类)非常强大,即使数据集大部分是垃圾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM