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 - 1sim_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 + 1sim_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_recsrecs_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丰富的数据分析和机器学习库,可以快速构建高效的推荐系统,提升电子商务平台的用户体验和销售额。
推荐系统是一个不断迭代和优化的过程,需要根据实际情况进行调整和改进。希望本文的内容能够为大家在构建推荐系统时提供一些参考和帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen2本地部署的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

网络安全技术实验一 信息收集和漏洞扫描

一、实验目的和要求 了解信息搜集和漏洞扫描的一般步骤,利用Nmap等工具进行信息搜集并进行综合分析;掌握TCP全连接扫描、TCP SYN扫描的原理,利用Scapy编写网络应用程序,开发端口扫描功能模块;使用漏洞扫描工具发现漏洞并进行渗透测…

8款高效电脑维护与多媒体工具合集!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://h5.cxyhub.com/?invitationhmeEo7 1. 系统安装利器——WinNTSetup 系统安装利器,目前最好用的系统安装器,Windows系统安装部署工具。支持所…

跟我学,数据结构和组原真不难

我个人认为408中计算机组成原理和数据结构最难 难度排行是计算机组成原理>数据结构>操作系统>计算机网络。 计算机组成原理比较难的原因是,他涉及的硬件的知识比较多,这对于大家来说难度就很高了,特别是对于跨考的同学来说&#x…

ABB机械人模型下载

可以下载不同格式的 https://new.abb.com/products/robotics/zh/robots/articulated-robots/irb-6700 step的打开各部件是分开的,没有装配在一起,打开看单个零件时,我们会发现其各零件是有装配的定位关系的。 新建一个装配环境,点…

【qt】MDI多文档界面开发

MDI多文档界面开发 一.应用场景二.界面设计三.界面类设计四.实现功能1.新建文档2.打开文件3.关闭所有4.编辑功能5.MDI页模式6.瀑布展开模式7.平铺模式 五.总结 一.应用场景 类似于vs的界面功能,工具栏的功能可以对每个文档使用! 二.界面设计 老规矩,边做项目边学! 目标图: 需…

【JMeter接口测试工具】第二节.JMeter项目实战(上)【实战篇】

文章目录 前言项目实战零、接口测试流程一、测试数据准备二、接口功能测试三、掌握测试用例编写四、自动化脚本架构搭建总结 前言 零、接口测试流程 1、制定测试计划,分配任务 2、从 API 文档中提取接口清单:对 API 文档简化,提高测试效率,接口清单就是对 API 文档…

【研发日记】Matlab/Simulink软件优化(三)——利用NaNFlag为数据处理算法降阶

文章目录 前言 背景介绍 初始算法 优化算法 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 见《【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法》 背景介绍 在一个嵌入式软件开发项目中,需要开…

OpenAI与核聚变公司寻求合作,白宫拨款1.8亿美元用于核聚变商业化研究

在当下,由 AI 引发的新一轮能源危机已经不再是一个小概率的「黑天鹅」事件,而是一头正在向我们猛冲而来的「灰犀牛」。 Helion Energy,是一家总部位于美国华盛顿州埃弗雷特的能源创业公司。 3.5研究测试:hujiaoai.cn 4研究测试&am…

Mysql的底层实现逻辑

Mysql5.x和Mysql8性能的差异 整体性能有所提高, 在非高并发场景下,他们2这使用区别不大,性能没有明显的区别。 只有高并发时,mysql8才体现他的优势。 2. Mysql数据存储结构Innodb逻辑结构 数据选用B树结构存储数据&#xff0…

如何画系统架构图学习

原文链接:https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/%E4%BB%8E%200%20%E5%BC%80%E5%A7%8B%E5%AD%A6%E6%9E%B6%E6%9E%84/51%20%E5%A6%82%E4%BD%95%E7%94%BB%E5%87%BA%E4%BC%98%E7%A7%80%E7%9A%84%E8%BD%AF%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%9B%BE%EF…

C++ 11 【可变参数模板】【lambda】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:C修炼之路⏪   🚚代码仓库:C高阶🚚   🌹关注我🫵带你学习更多C知识   🔝🔝 目录 前言 一、新的类功能 1.1默认成员函数—…

【数据分析基础】实验三 文件操作、数组与矩阵运算

一.实验目的 掌握上下文管理语句with的使用方法。掌握文本文件的操作方法。了解os、os.path模块的使用。掌握扩展库Python-docx、openpyxl的安装与操作word、Excel文件内容的方法。熟练掌握numpy数组相关运算和简单应用。熟练使用numpy创建矩阵,熟悉常用…

新技术前沿-2024-构建个人知识库和小语言模型

OllamaWebUIAnythingLLM,构建安全可靠的个人/企业知识库 1 技术路线一 1.1 搭建本地大模型Ollama 1.2 搭建用户界面open WebUI 使用Docker Desktop Open-webui。它可以快速基于Ollama构筑本地UI。 如果没有科学上网,很可能会拉不动,可以试…

linux网络服务“PXE网络批量装机和Kickstart全自动化安装”

PXE网络批量装机 pxe自动装机: 服务端和客户端 pxe c/s 模式:允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。 无人值守 :安装选项不需要人为干预&#xf…

FlexJavaFramwork

FlexJavaFramwork架构

【高校科研前沿】广西大学博士生冯德东为一作在Habitat Int发文:区域乡村性与贫困治理变化的时空格局及相关效应——以滇桂黔石漠化地区为例

1.文章简介 论文名称:Spatio-temporal patterns and correlation effects of regional rurality and poverty governance change: A case study of the rocky desertification area of Yunnan-Guangxi-Guizhou, China(区域乡村性与贫困治理变化的时空格…

从零开始搭建Electron项目(二)之例程解析

本专栏,前面学习了怎么下载例程并运行。 这里解析例程的构成 从零开始搭建Electron项目之运行例程-CSDN博客文章浏览阅读22次。最好的学习方式就是:给一段能够运行的代码示例。本文给出了例程资源,以及运行的步骤。在国内开发electron有一点特…

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

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

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…