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



我有以下数据集:

| 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是一个很好的开始,但它可能无法找到一个合适的决策边界来分离你的问题。也许可以尝试随机森林和/或新的历史增强分类器(类似于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)

试试看你过得怎么样。另外,试试别人的建议。一些算法在处理零、零等方面非常聪明。我相信随机森林(回归和分类(即使数据集大多是垃圾,也非常稳健。

最新更新