机器学习 预测客户下一次购买的算法
保留客户对于在竞争激烈的市场中取得成功至关重要。保留现有消费者比获取新消费者更具成本效益。客户保留能够带来忠实的客户群体、增加收入和长期盈利能力。然而,包括经济状况、竞争和时尚趋势在内的多种因素使得预测客户行为和偏好变得困难。为了应对这些挑战,企业需要先进的机器学习和数据分析能力来分析消费者数据并生成精确的预测。通过预测消费者的下一次购买,企业可以调整营销策略,提升客户体验,增加满意度,最终提高保留率和忠诚度。在本文中,我们将应用机器学习来预测读者的下一次购买行为。
使用机器学习预测客户的下一次购买行为
以下是使用机器学习预测客户下一次购买的
步骤指南:
- 收集并准备数据,包括加载数据、进行特征工程、清洗数据和导入所需库。
- 从数据中创建训练集和测试集。
- 使用训练数据创建随机森林回归模型。
- 使用多种评估指标评估模型性能,包括解释方差分数、R-squared、平均绝对误差和均方误差。
步骤
- 导入所需的库,包括datetime、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列转换为日期时间对象。
-
TotalPrice是Quantity和Price列的结果,表示每次交易的总成本。
-
每个交易的年份和月份存储在InvoiceYearMonth列中,该列是从InvoiceDate列派生出来的。
-
LastPurchaseDate – 每个消费者上次购买的日期。
-
DaysSinceLastPurchase – 自每位客户最近一次购买以来过去的天数。
-
NextPurchaseDate是在最近一次购买后7到30天之间随机选择的日期。
-
DaysUntilNextPurchase – 每位客户下次购买前的持续时间。
-
选择CustomerID、TotalPrice、InvoiceYearMonth、DaysSinceLastPurchase和DaysUntilNextPurchase作为我们希望用于训练模型的列。
-
使用df = df.drop_duplicates()消除任何重复行。
-
收集和准备数据
在此阶段,我们获取数据并进行必要的特征工程和清洗。UCI Machine Learning Repository可以将在线零售数据集提供给公众使用,我们可以将其用于这个项目。
# Import libraries
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
# Step 1: Gather and Prepare the Data
df = pd.read_excel('/content/sample_data/online_retail_II.xlsx')
df = df[df['Customer ID'].notna()] # Remove rows without CustomerID
df = df[df['Quantity'] > 0] # Remove rows with negative or zero quantity
df = df[df['Price'] > 0] # Remove rows with negative or zero price
# Parse dates
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])
# Create features
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%。
# Step 2 − Split the Data into Training and Testing Sets
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)将模型拟合到训练数据上。
# Step 3 − Train the Machine Learning Model
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-squared(R2)。
# Step 4− Evaluate the Model
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('Mean Absolute Error:', mae)
print('Mean Squared Error:', mse)
print('R-squared:', r2)
print('Explained Variance Score:', evs)
结果
Mean Absolute Error− 2.8361809953950248
Mean Squared Error − 31.313248452439648
R-squared − 0.9975804147472181
Explained Variance Score − 0.9975804233638988
均方误差(MSE)计算预期值和实际值之间的平均差异。 R2统计量将模型解释的目标变量的变异表达为百分比。与总体方差相比,EVS计算模型解释的目标变量的变异百分比。
结论
总之,本文介绍的方法涉及获取和处理客户数据,将其分成训练和测试集,训练机器学习模型,并使用多种指标评估模型的性能。个性化营销努力、提升客户体验和更好地保留客户是预测消费者下次购买的几个潜在用途。