本文共 2005 字,大约阅读时间需要 6 分钟。
本文将围绕如何通过分析Instacart的市场篮蔬果订单数据,预测用户的购物行为展开。为此,我们首先需要获取并整合相关数据集。
order_id
、product_id
、add_to_cart_order
和reordered
。我们可以使用Pandas读取该数据,为:order_products = pd.read_csv("order_products__prior.csv")
product_id
、product_name
、aisle_id
和department_id
。读取方式如下:products = pd.read_csv("products.csv")
order_id
、user_id
、eval_set
、order_number
等。读取代码为:orders = pd.read_csv("orders.csv")
aisle_id
和aisle
。读取代码如下:aisles = pd.read_csv("aisles.csv")
通过上述步骤,我们成功获取了订单数据、商品数据以及用户及订单信息。在实际应用中,这些数据需要分别存储,并确保字段一致性,以便于后续操作。
为了使用户的购物行为能够与商品分类关联起来,我们需要将用户信息与商品类别进行整合。为此,可以按照以下步骤进行:
合并aisles和products表: 两个表都包含aisle_id
字段,可以通过merged函数进行内连接:
tab1 = pd.merge(aisles, products, on=["aisle_id"])
合并后的表将包含aisle_id
、product_id
、aisle
、product_name
等字段。
将order_products与tab1表合并: 目标是将商品与用户的历史订单信息关联起来:
tab2 = pd.merge(tab1, order_products, on=["product_id"])
此时,tab2
表中将包含aisle_id
、aisle
、user_id
(该字段需要进一步关联)等信息。
关联orders表: 用户的订单信息(user_id
)和商品的分类信息(aisle_id
)还需要通过order_id
进行关联。可以通过以下步骤完成:
tab3 = pd.merge(tab2, orders, on=["order_id"])
这样我们就能将用户ID与商品类别直接关联起来。
生成交叉表: 最终目标是将用户ID作为行标签、商品类别作为列标签,生成一个用户-商品类别的频率矩阵。可以使用pandas.crosstab
进行操作:
table = pd.crosstab(tab3["user_id"], tab3["aisle"])
这将生成一个矩阵,其中行为用户ID,列为商品类别,值为对应类别的购买频率。
在现有的134个特征中,许多特征的值可能存在冗余或为零。因此,我们可以通过PCA(主成分分析)对数据进行降维。
实例化转换器: 首先需要选择保留的主成分数量,通常建议超过95%的方差:
from sklearn.decomposition import PCA# 实例化转换器,设置保留的主成分数量transfer = PCA(n_components=0.95)
应用转换器: 使用fit_transform
方法将数据转换过去:
data_new = transfer.fit_transform(table)
经过转换后,数据将降低维度至44个。
由于我们的目标是无监督分类,我们将使用K-means算法,将用户分为若干类别。假设我们选择将用户分为3类,具体步骤如下:
实例化K-means模型:
from sklearn.cluster import KMeansestimator = KMeans(n_clusters=3)
训练模型并预测:
estimator.fit(data_new)y_predict = estimator.predict(data_new)
这将为每个用户分配一个类别标签,0、1或2。
评估模型: 通过查看预测结果,验证模型的性能。此外,可以进一步计算中心点,以了解各类别的代表性。
通过以上步骤,我们成功地将用户的购物行为数据转化为了可分析的特征,并通过降维技术将复杂度降低为更少的维度。随后,K-means算法实现了用户的无监督分类,为后续的精度优化和应用提供了基础。
转载地址:http://pjejz.baihongyu.com/