Python数据分析与机器学习在电子商务推荐系统中的应用

文章目录

  • 📑引言
  • 一、推荐系统的类型
  • 二、数据收集与预处理
    • 2.1 数据收集
    • 2.2 数据预处理
  • 三、基于内容的推荐
    • 3.1 特征提取
    • 3.2 计算相似度
    • 3.3 推荐物品
  • 四、协同过滤推荐
    • 4.1 基于用户的协同过滤
    • 4.2 基于物品的协同过滤
  • 五、混合推荐与评估推荐系统
    • 5.1 结合推荐结果
    • 5.2 评估推荐系统
  • 六、小结

📑引言

在现代电子商务平台上,推荐系统是提升用户体验和增加销售额的关键工具。推荐系统能够根据用户的行为和偏好,推荐个性化的产品,帮助用户发现他们可能感兴趣的商品。Python作为一种强大的编程语言,结合其丰富的数据分析和机器学习库,成为构建推荐系统的理想选择。本文将探讨Python数据分析与机器学习在电子商务推荐系统中的应用,详细介绍构建推荐系统的步骤和技术。

一、推荐系统的类型

推荐系统主要分为三类:基于内容的推荐、协同过滤推荐和混合推荐。

  1. 基于内容的推荐:根据用户过去喜欢的物品的特征,推荐具有类似特征的物品。例如,如果用户喜欢某本书,系统会推荐内容类似的书籍。
  2. 协同过滤推荐:根据用户的行为数据(例如评分、点击等),推荐其他用户喜欢的物品。这种方法又分为基于用户的协同过滤和基于物品的协同过滤。
  3. 混合推荐:结合多种推荐方法,以提高推荐的准确性和覆盖率。

image.png

二、数据收集与预处理

在构建推荐系统之前,需要收集并预处理数据。电子商务平台上可以收集的数据包括用户行为数据(点击、浏览、购买等)、用户属性数据(年龄、性别等)和物品属性数据(类别、价格等)。

2.1 数据收集

数据收集可以通过日志系统、数据库查询和第三方API等方式实现。以下是一个简单的示例,展示如何从数据库中收集用户行为数据:

import pandas as pd
import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('ecommerce.db')

# 查询用户行为数据
query = '''
SELECT user_id, item_id, rating, timestamp
FROM user_behaviors
'''
df = pd.read_sql_query(query, conn)

# 关闭数据库连接
conn.close()

# 查看数据
print(df.head())

2.2 数据预处理

数据预处理是数据分析和机器学习的关键步骤。它包括数据清洗、处理缺失值、特征工程等。

# 数据清洗:去除重复记录
df = df.drop_duplicates()

# 处理缺失值:填充或删除缺失值
df = df.dropna()

# 特征工程:提取时间特征
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['hour'] = df['timestamp'].dt.hour
df['dayofweek'] = df['timestamp'].dt.dayofweek

# 查看预处理后的数据
print(df.head())

三、基于内容的推荐

基于内容的推荐系统通过分析物品的特征来进行推荐。例如,假设有用户A喜欢某本书,我们可以推荐其他内容相似的书籍给用户A。

3.1 特征提取

首先,需要从物品描述中提取特征。可以使用TF-IDF(词频-逆文档频率)方法将文本描述转换为特征向量。

from sklearn.feature_extraction.text import TfidfVectorizer

# 示例物品描述数据
descriptions = [
    "Python for data analysis",
    "Machine learning with Python",
    "Data science and big data",
    "Advanced Python programming"
]

# 使用TF-IDF提取特征
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(descriptions)

# 查看特征向量
print(tfidf_matrix.toarray())

3.2 计算相似度

接下来,使用余弦相似度计算物品之间的相似度。

from sklearn.metrics.pairwise import cosine_similarity

# 计算余弦相似度
cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)

# 查看相似度矩阵
print(cosine_sim)

3.3 推荐物品

根据相似度矩阵,可以为每个物品推荐相似的物品。

# 推荐函数
def recommend(item_index, cosine_sim=cosine_sim):
    # 获取相似度分数
    sim_scores = list(enumerate(cosine_sim[item_index]))
    
    # 按相似度排序
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    
    # 返回相似度最高的前5个物品
    sim_scores = sim_scores[1:6]
    item_indices = [i[0] for i in sim_scores]
    return item_indices

# 示例推荐
recommended_items = recommend(0)
print("Recommended items:", recommended_items)

image.png

四、协同过滤推荐

协同过滤推荐系统通过用户行为数据(如评分)来推荐物品。它包括基于用户的协同过滤和基于物品的协同过滤。

4.1 基于用户的协同过滤

基于用户的协同过滤通过找到相似用户来推荐物品。

from sklearn.metrics.pairwise import cosine_similarity
from sklearn.model_selection import train_test_split
from scipy.sparse import csr_matrix

# 示例用户评分数据
ratings = {
    'user_id': [1, 1, 1, 2, 2, 3, 3, 4],
    'item_id': [1, 2, 3, 1, 4, 2, 3, 4],
    'rating': [5, 3, 4, 4, 2, 5, 3, 4]
}
df_ratings = pd.DataFrame(ratings)

# 创建用户-物品评分矩阵
user_item_matrix = df_ratings.pivot(index='user_id', columns='item_id', values='rating').fillna(0)
user_item_sparse = csr_matrix(user_item_matrix.values)

# 计算用户相似度
user_sim = cosine_similarity(user_item_sparse)

# 查看用户相似度矩阵
print(user_sim)

根据用户相似度矩阵,可以为每个用户推荐相似用户喜欢的物品。

# 推荐函数
def user_based_recommend(user_id, user_sim=user_sim, user_item_matrix=user_item_matrix, top_k=5):
    user_index = user_id - 1
    sim_scores = user_sim[user_index]
    sim_users = list(enumerate(sim_scores))
    sim_users = sorted(sim_users, key=lambda x: x[1], reverse=True)
    sim_users = sim_users[1:top_k+1]
    
    recommended_items = set()
    for sim_user, _ in sim_users:
        sim_user_id = sim_user + 1
        sim_user_items = set(user_item_matrix.columns[user_item_matrix.loc[sim_user_id] > 0])
        recommended_items.update(sim_user_items)
    
    user_items = set(user_item_matrix.columns[user_item_matrix.loc[user_id] > 0])
    recommended_items.difference_update(user_items)
    
    return list(recommended_items)

# 示例推荐
recommended_items = user_based_recommend(1)
print("Recommended items for user 1:", recommended_items)

4.2 基于物品的协同过滤

基于物品的协同过滤通过找到相似物品来推荐物品。

# 计算物品相似度
item_sim = cosine_similarity(user_item_sparse.T)

# 查看物品相似度矩阵
print(item_sim)

根据物品相似度矩阵,可以为每个物品推荐相似物品。

# 推荐函数
def item_based_recommend(user_id, item_sim=item_sim, user_item_matrix=user_item_matrix, top_k=5):
    user_items = user_item_matrix.loc[user_id]
    sim_scores = item_sim.dot(user_items)
    sim_scores = list(enumerate(sim_scores))
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    recommended_items = [i[0] + 1 for i in sim_scores if user_items[i[0]] == 0][:top_k]
    return recommended_items

# 示例推荐
recommended_items = item_based_recommend(1)
print("Recommended items for user 1:", recommended_items)

五、混合推荐与评估推荐系统

混合推荐结合了基于内容的推荐和协同过滤推荐,以提高推荐系统的性能。

5.1 结合推荐结果

通过结合基于内容的推荐和协同过滤推荐的结果,可以得到更为精准的推荐。

def hybrid_recommend(user_id, item_index, content_weight=0.5, user_weight=0.25, item_weight=0.25):
    content_recs = recommend(item_index)
    user_recs = user_based_recommend(user_id)
    item_recs = item_based_recommend(user_id)
    
    all_recs = content_recs + user_recs + item_recs
    recs_counts = pd.Series(all_recs).value_counts()
    weighted_recs = recs_counts * [content_weight] * len(content_recs) + recs_counts * [user_weight] * len(user_recs) + recs_counts * [item_weight] * len(item_recs)
    weighted_recs = weighted_recs.sort_values(

ascending=False)
    
    return list(weighted_recs.index[:5])

# 示例推荐
recommended_items = hybrid_recommend(1, 0)
print("Hybrid recommended items for user 1:", recommended_items)

5.2 评估推荐系统

推荐系统的评估是确保其有效性的关键。常用的评估指标包括准确率、召回率、F1值和平均准确率(MAP)。

from sklearn.metrics import precision_score, recall_score, f1_score, average_precision_score

# 示例真实值和预测值
true_labels = [1, 1, 0, 0, 1, 0, 1, 0]
pred_labels = [1, 0, 0, 1, 1, 0, 1, 1]

# 计算评估指标
precision = precision_score(true_labels, pred_labels)
recall = recall_score(true_labels, pred_labels)
f1 = f1_score(true_labels, pred_labels)
map_score = average_precision_score(true_labels, pred_labels)

# 输出评估结果
print(f"Precision: {precision:.2f}")
print(f"Recall: {recall:.2f}")
print(f"F1 Score: {f1:.2f}")
print(f"MAP: {map_score:.2f}")

六、小结

本篇,我们了解了Python在电子商务推荐系统中的应用,从数据收集、预处理到推荐算法的实现,再到系统的评估。基于内容的推荐、协同过滤推荐和混合推荐各有优劣,具体应用中可以根据需求选择合适的方法。利用Python丰富的数据分析和机器学习库,可以快速构建高效的推荐系统,提升电子商务平台的用户体验和销售额。
推荐系统是一个不断迭代和优化的过程,需要根据实际情况进行调整和改进。希望本文的内容能够为大家在构建推荐系统时提供一些参考和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696727.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 下载镜像发现超时,加速加速方法

报错原因有可能旧的不能用了!!!换下面的!!! cat /etc/docker/daemon.json "registry-mirrors": ["https://bhu1x6ya.mirror.aliyuncs.com"] 编辑完成后执行以下命令重启docker即可&a…

企业官网:过时了,但又没完全过时

作为一名互联网冲浪级选手,我经常会看到一些有趣的产品。 这两年比较让我感兴趣的产品有「飞聊」、「即刻」及其旗下的「橙 App」等等,然后我就想上它们的官网看看。 虽然现在 app 是主流,但我非常不喜欢下载 app,一是麻烦&…

基于STM32开发的智能空气质量监控系统

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取,感谢支持!⬇ 点击领取更多嵌入式详细资料 问题讨论,stm32的资料领取可以私信! 目录 引言环境准备智能空气质量监控系统基础代码实现&…

【吊打面试官系列-Mysql面试题】MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ?

大家好,我是锋哥。今天分享关于 【MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ?】面试题,希望对大家有帮助; MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ? 以下是 MySQL_fetch_array 和 MySQL…

高考志愿填报的技巧和方法

高考过后,最让家长和学生需要重视的就是怎样填报志愿。高考完和出成绩之前有一段很长的时间,而成绩出来之后往往报考的时间非常的紧张。在很短的时间内,高考的学生和他的家长要综合高考的成绩,考虑院校,专业&#xff0…

【9】openssl 代码调试

0x01 前言 最近在学习密码学,但是国密算法(SM2,SM3,SM4,SM9)的细节都在openssl项目里,当然一些国际算法也在。想着看下代码执行过程和理论结合起来。中间走了一些弯路,做个笔记。 0x02 openssl安装 一开始认为是不是直接下载好的…

万向节锁死(Gimbal Lock)

Gimbal Lock是一个常见的3D动画问题,主要由旋转顺序引起的。我来详细解释一下它的成因: 在三维空间中,任何旋转都可以分解为绕X,Y,Z三个轴的欧拉旋转(Euler Rotation)。每个轴的旋转是按照一定顺序进行的,比如XYZ或ZYX等。 理论上,通过这三个旋转值的组合,可以达到任意的空间…

14. RTCP 协议

RTCP 协议概述 RTCP(Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP),实时传输控制协议,是实时传输协议(RTP)的一个姐妹协议。 注:RTP 协议和 RTP 控制协议&#…

Policy-Based Reinforcement Learning(1)

之前提到过Discount Return: Action-value Function : State-value Function: (这里将action A积分掉)这里如果策略函数很好,就会很大;反之策略函数不好,就会很小。 对于离散类型: …

QPS,平均时延和并发数

我们当前有两个服务A和B,想要知道哪个服务的性能更好,该用什么指标来衡量呢? 1. 单次请求时延 一种最简单的方法就是使用同一请求体同时请求两个服务,性能越好的服务时延越短,即 R T 返回结果的时刻 − 发送请求的…

error 12154 received logging on to the standby报错处理

错误 处理方法 该参数不是主库的servicename (低级错误) SQL> alter system set log_archive_dest_2 SERVICEstandby ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby; System altered. 观察主库日志: 备库日志: 该问题会影…

SpringBoot 配置事务

SpringBoot 在启动时已经加载了事务管理器,所以只需要在需要添加事务的方法/类上添加Transactional即可生效,无需额外配置。 TransactionAutoConfiguration 事务的自动配置类解析: SpringBoot 启动时加载/META-INF/spring/org.springframewor…

月薪6万,想离职...

大家好,我是无界生长,国内最大AI付费社群“AI破局俱乐部”初创合伙人。这是我的第 39 篇原创文章——《月薪6万,想离职...》 是的,你没有看错,我月薪6万,却想离职,很不可思议吧?周围…

matlab使用教程(95)—显示地理数据

下面的示例说明了多种表示地球地貌的方法。此示例中的数据取自美国商务部海洋及大气管理局 (NOAA) 国家地理数据中心,数据通告编号为 88-MGG-02。 1.关于地貌数据 数据文件 topo.mat 包含地貌数据。topo 是海拔数据,topomap1 是海拔的颜色图。 load t…

UART基本定义、三种编程方式、freertos内怎么用、怎么封装

文章目录 串口基本概念串口的三种编程方式uart编程查询方式不常用、其他两个方式用的多中断方式:代码原理 DMA方式:配置DMA原理代码 效率最高的UART编程方式:是什么?操作 在freertos里面调用uart应该怎么做?代码 面向对…

【PL理论】(16) 形式化语义:语义树 | <Φ, S> ⇒ M | 形式化语义 | 为什么需要形式化语义 | 事实:部分编程语言的设计者并不会形式化语义

💭 写在前面:本章我们将继续探讨形式化语义,讲解语义树,然后我们将讨论“为什么需要形式化语义”,以及讲述一个比较有趣的事实(大部分编程语言设计者其实并不会形式化语义的定义)。 目录 0x00…

【EAI】生成可爱的贴纸

贴纸生成工具上线啦,目前支持贴纸生成、文生图功能。 地址:https://eai.coderbox.cn/ 功能: 贴纸生成 通过简单提示词,生成可爱的贴纸,支持4种像素规格文生图 基于开源模型实现,模型持续集成中作品库 生…

GLM4指令微调实战(完整代码)

GLM4是清华智谱团队最近开源的大语言模型。 以GLM4作为基座大模型,通过指令微调的方式做高精度文本分类,是学习LLM微调的入门任务。 使用的9B模型,显存要求相对较高,需要40GB左右。 在本文中,我们会使用 GLM4-9b-Chat…

1.VMware软件的安装与虚拟机的创建

1. VMware软件的安装 1.1 为什么需要虚拟机 嵌入式Linux开发需要在Linux系统下运行,我们选择Ubuntu。   1、双系统安装     有问题,一次只能使用一个系统。Ubuntu基本只做编译用。双系统安装不能同时运行Windows和Linux。   2、虚拟机软件   …

解决!word转pdf时,怎样保持图片不失真

#今天用word写了期末设计报告,里面有很多过程的截图,要打印出来,想到pdf图片不会错位,就转成了pdf,发现图片都成高糊了,找了好多方法,再不下载其他软件和插件的情况下,导出拥有清晰的…