使用机器学习预测客户的下一次购买
留住客户对于在竞争激烈的市场中取得成功至关重要。留住现有消费者比吸引新消费者更具成本效益。留住客户可以培养忠诚的客户群、增加收入和长期盈利。然而,包括经济状况、竞争和时尚趋势在内的许多因素使得预测客户行为和偏好变得困难。企业需要复杂的机器学习和数据分析能力来分析消费者数据并进行精确的预测,以应对这些挑战。企业可以通过预测消费者的下一次购买来调整营销工作、改善客户体验并提高满意度,这最终将提高留存率和忠诚度。在本文中,我们将应用机器学习来预测读者的下一次购买。
使用机器学习预测客户的下一次购买
以下是使用机器学习预测客户即将进行的购买的分步指南 -
通过加载数据、进行特征工程、清理数据和导入必要的库来收集和准备数据
根据数据创建训练集和测试集。
利用训练数据创建随机森林回归模型
使用各种指标来评估模型的性能,包括解释方差得分、R 平方、平均绝对误差和均方误差。
算法
导入必要的库,包括日期时间、 numpy 和 pandas。
使用 pd.read_excel() 加载数据,然后将其保存为 DataFrame。
删除任何缺少 CustomerID 的条目,因为如果没有 CustomerID,我们就无法预测客户的下一次购买。为此,请使用 df = df[df['CustomerID'].notna()]。
删除数量为 0 或负值的任何行,因为它们可能不正确。用于此的公式是 df = df[df['Quantity'] > 0]。
消除价格为负数或零的任何条目,因为这些也可能是错误。用于此的公式是 df = df[df['UnitPrice'] > 0]。
使用 pd.to_datetime() 将 InvoiceDate 列转换为 datetime 对象。
TotalPrice 是 Quantity 和 Price 列的结果,表示每笔交易的全部费用。
每笔交易的年份和月份位于 InvoiceYearMonth 列中,该列源自 InvoiceDate 列。
LastPurchaseDate − 每个消费者上次购买的日期。
DaysSinceLastPurchase − 自每个客户最近一次购买以来已经过了多少天
NextPurchaseDate 是随机选择的日期,在客户最近一次购买后的 7 到 30 天之间购买。
DaysUntilNextPurchase − 每个客户下次购买前的持续时间。
选择 CustomerID、TotalPrice、InvoiceYearMonth、DaysSinceLastPurchase 和 DaysUntilNextPurchase 作为我们希望用于训练模型的列
使用 df = df.drop_duplicates() 消除任何重复的行。
收集和准备数据
我们在此阶段获取数据并执行任何必要的特征工程和清理。 UCI 机器学习库在此向公众开放了在线零售数据集,我们可以将其用于该项目。
# 导入库 import pandas as pd import numpy as np from datetime import datetime, timedelta from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, explained_variance_score # 步骤 1:收集和准备数据 df = pd.read_excel('/content/sample_data/online_retail_II.xlsx') df = df[df['Customer ID'].notna()] # 删除没有 CustomerID 的行 df = df[df['Quantity'] > 0] # 删除数量为负数或零的行 df = df[df['Price'] > 0] # 删除价格为负数或零的行 # 解析日期 df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate']) # 创建特征 df['TotalPrice'] = df['Quantity'] * df['Price'] df['InvoiceYearMonth'] = df['InvoiceDate'].apply(lambda x: x.strftime('%Y%m')) df['LastPurchaseDate'] = df.groupby('Customer ID')['InvoiceDate'].transform('max') df['DaysSinceLastPurchase'] = (df['LastPurchaseDate'].max() - df['LastPurchaseDate']).dt.days df['NextPurchaseDate'] = df.groupby('Customer ID')['InvoiceDate'].transform(lambda x: x.max() + timedelta(days=np.random.randint(7, 30))) df['DaysUntilNextPurchase'] = (df['NextPurchaseDate'] - df['InvoiceDate']).dt.days df = df[['Customer ID', 'TotalPrice', 'InvoiceYearMonth', 'DaysSinceLastPurchase', 'DaysUntilNextPurchase']] df = df.drop_duplicates()
将数据分为训练集和测试集
使用公式 X = df.drop(['DaysUntilNextPurchase'], axis=1) 和 y = df['DaysUntilNextPurchase'] 将独立变量 (X) 与因变量 (y) 分离。
利用 train_test_split() 将数据分为训练集和测试集。我们指定随机状态为 42,测试大小为 0.2,即 20%。
我们在此阶段将数据分为训练集和测试集。
# 步骤 2 − 将数据拆分为训练集和测试集 X = df.drop(['DaysUntilNextPurchase'], axis=1) y = df['DaysUntilNextPurchase'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
训练机器学习模型
sklearn.ensemble 的应导入 RandomForestRegressor 类。
n_estimators 等于 100,random_state 等于 42,创建该类的新实例。
Model.fit(X_train, y_train) 将模型与训练数据拟合。
在训练数据的基础上,我们现在训练一个随机森林回归模型。
# 步骤 3 − 训练机器学习模型 model = RandomForestRegressor(n_estimators=100, random_state=42) model.fit(X_train, y_train)
评估模型
model.predict(X_test) 使用学习到的模型根据测试数据进行预测。
使用 mean_absolute_error(y_test, y_pred) 计算平均绝对误差 (MAE)。
可以使用公式 mean_squared_error(y_test, y_pred) 计算均方误差 (MSE)。
可以使用公式 r2_score(y_test, y_pred) 计算 R 平方 (R2)。
此时,我们使用一系列指标来评估模型的有效性。
# 步骤 4− 评估模型 y_pred = model.predict(X_test) mae = mean_absolute_error(y_test, y_pred) mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) evs = explained_variance_score(y_test, y_pred) print('平均绝对误差:', mae) print('均方误差:', mse) print('R 平方:', r2) print('解释方差得分:', evs)
结果
平均绝对误差− 2.8361809953950248 均方误差 − 31.313248452439648 R 平方 − 0.9975804147472181 解释方差得分 − 0.9975804233638988
均方误差 (MSE) 计算预期值与实际值之间的平均差异。模型解释的目标变量的变化用 R2 统计量的百分比表示。与总体方差相比,EVS 计算模型解释的目标变量的变化百分比。
结论
总之,本文中使用的方法包括获取和处理客户数据、将其分为训练集和测试集、训练机器学习模型以及使用各种指标评估模型的性能。个性化营销工作、增强的客户体验和更高的客户保留率只是预测消费者后续购买的几个潜在用途。