【Python机器学习】基于SVD建立商品推荐系统

发布时间:2024年01月06日

一、项目背景

深入探索客户购物偏好的宝贵数据集,为企业揭示消费者行为的秘密。本数据集涵盖了消费者的年龄、性别、购买历史、首选支付方式及购买频率等多维度信息,是分析客户行为的关键。经过严格的数据清洗和验证,确保了数据的准确性和可靠性,为企业的决策提供坚实基础。此数据集不仅揭示了客户的真实需求和偏好,还为企业在产品定制、市场细分和精准营销等方面提供了有力支持。在竞争激烈的市场环境中,了解客户购物偏好是赢得市场份额、提高客户满意度的关键。本数据集凭借其细分信息和独特价值,将帮助企业实现商业目标,成为市场研究的宝贵资源。

二、数据说明

字段 说明
Customer ID 客户唯一标识符
Age 客户年龄
Gender 客户性别(男/女)
Item Purchased 客户购买的商品
Category 购买商品的类别
Purchase Amount (USD) 购买金额(美元)
Location 购买地点
Size 购买商品的尺码
Color 购买商品的颜色
Season 购买商品的季节
Review Rating 客户对购买商品的评分
Subscription Status 客户是否拥有订阅(是/否)
Shipping Type 客户选择的配送方式
Discount Applied 是否应用了折扣(是/否)
Promo Code Used 是否使用了优惠码(是/否)
Previous Purchases 客户在该商店的历史购买总数,不包括当前交易
Payment Method 客户最常用的支付方式
Frequency of Purchases 客户购买频率(每周、每两周、每月等)

三、数据预处理  

3.1 导入库及数据读取

# 导入需要的库
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.sparse.linalg import svds
from sklearn.preprocessing import MinMaxScaler
import warnings  
from pylab import mpl, plt
warnings.filterwarnings("ignore")
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'


 # 读取数据
data = pd.read_csv("./shopping_trends.csv")

 3.2 数据预览

# 查看数据维度
data.shape
# 查看数据信息
data.info()
# 查看各列缺失值
data.isna().sum()
# 查看重复值
data.duplicated().sum()
# 判断使用折扣和使用优惠码的情况是否同时出现
(data['Discount Applied'] == data['Promo Code Used']).all()

通过判断Discount Applied和Promo Code Used两列,如果相等为True,则认定使用使用了优惠码,反之亦然。

 3.3数据处理

首先,处理数据之前要养成好的习惯先查看数据集。

# 处理数据之前,先查看一下数据
data.head()

# 修改Customer ID格式
data['Customer ID'] = data['Customer ID'].astype(str)
# 删除使用优惠码的那一列
data.drop(['Promo Code Used'],axis=1,inplace=True)

 3.4数据探索

3.4.1查看客户基本信息分布

sns.set_style("whitegrid")
plt.figure(figsize=(15, 7))
plt.subplot(1, 2, 1)
sns.distplot(data['Age'], kde=False, bins=10)
plt.title(f'Age Distribution', fontsize=15)
plt.xlabel('Age', fontsize=12)
plt.ylabel('Count', fontsize=12)
plt.subplot(1, 2, 2)
sns.countplot(data=data, x='Gender',order=data['Gender'].value_counts().index)
plt.title(f'Gender Distribution', fontsize=15)
plt.xlabel('Gender', fontsize=12)
plt.ylabel('Count', fontsize=12)
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

由图可知:男性客户数量大约是女性客户数量的两倍,客户的年龄分布比较均匀,从18岁到70岁,各年龄段人数相近。

3.4.2购物行为分析

# 1.商品类别的销售情况
category_sales = data.groupby('Category')['Purchase Amount (USD)'].sum().sort_values(ascending=False)

# 2.商品类别的订单量
category_popularity = data['Category'].value_counts()

# 3.不同类别商品的平均消费金额
category_avg_purchase = data.groupby('Category')['Purchase Amount (USD)'].mean().sort_values(ascending=False)

# 4.客户最常用的支付方式
payment_method_counts = data['Payment Method'].value_counts()

# 创建画布
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))
fig.tight_layout(pad=5.0)

# 绘制商品类别销售总额的条形图
sns.barplot(x=category_sales.index, y=category_sales.values, ax=axes[0, 0])
axes[0, 0].set_title('Total Sales by Category')
axes[0, 0].set_xlabel('Category')
axes[0, 0].set_ylabel('Total Sales (USD)')

# 绘制商品订单情况的条形图
sns.barplot(x=category_popularity.index, y=category_popularity.values, ax=axes[0, 1])
axes[0, 1].set_title('Popularity by Category')
axes[0, 1].set_xlabel('Category')
axes[0, 1].set_ylabel('Number of Orders')

# 绘制商品类别的平均消费金额的条形图
sns.barplot(x=category_avg_purchase.index, y=category_avg_purchase.values, ax=axes[1, 0])
axes[1, 0].set_title('Average Purchase
文章来源:https://blog.csdn.net/m0_61635017/article/details/135372099
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。