基于Python的白酒数据推荐系统
【摘要】 基于Python的白酒数据推荐系统1. 引言中国白酒市场品类繁多、消费需求个性化显著,用户常面临“选择困难”。传统推荐依赖人工经验或简单销量排序,难以精准匹配用户偏好。本系统基于Python生态,融合协同过滤、内容推荐与深度学习技术,构建智能化白酒推荐引擎,旨在提升用户发现心仪产品的效率,同时助力酒企优化营销策略。2. 技术背景2.1 核心技术栈数据处理:Pa...
基于Python的白酒数据推荐系统
1. 引言
中国白酒市场品类繁多、消费需求个性化显著,用户常面临“选择困难”。传统推荐依赖人工经验或简单销量排序,难以精准匹配用户偏好。
本系统基于Python生态,融合协同过滤、内容推荐与深度学习技术,构建智能化白酒推荐引擎,旨在提升用户发现心仪产品的效率,同时助力酒企优化营销策略。
2. 技术背景
2.1 核心技术栈
- 数据处理:
Pandas
(数据清洗)、NumPy
(数值计算)。 - 推荐算法:
Surprise
(协同过滤)、Scikit-learn
(内容相似度)、TensorFlow/Keras
(深度学习)。 - 存储:
MySQL
(结构化数据)、Redis
(缓存热门推荐结果)。 - 可视化:
Dash
(交互式推荐结果展示)。
2.2 数据来源
- 公开白酒数据集(如酒仙网、天猫白酒品类数据)。
- 用户行为日志(浏览、购买、评分记录)。
- 白酒属性数据(香型、度数、产地、原料、价格区间)。
3. 应用场景
3.1 场景1:基于用户行为的协同过滤推荐
- 目标:根据用户历史评分或购买记录,推荐相似用户偏好的白酒。
- 代码实现:
from surprise import Dataset, KNNBasic, Reader import pandas as pd # 模拟用户-白酒评分数据(用户ID、白酒ID、评分) data = pd.DataFrame({ 'user_id': [1, 1, 2, 2, 3, 3], 'wine_id': [101, 102, 101, 103, 102, 103], 'rating': [5, 4, 3, 5, 4, 4] }) # 加载数据至Surprise格式 reader = Reader(rating_scale=(1, 5)) dataset = Dataset.load_from_df(data[['user_id', 'wine_id', 'rating']], reader) # 训练KNN协同过滤模型 trainset = dataset.build_full_trainset() model = KNNBasic(sim_options={'user_based': True}) model.fit(trainset) # 为用户1推荐Top-2白酒 user_inner_id = trainset.to_inner_uid(1) neighbors = model.get_neighbors(user_inner_id, k=2) neighbor_wine_ids = [trainset.to_raw_iid(i) for i in neighbors] print("为用户1推荐的白酒ID:", neighbor_wine_ids)
3.2 场景2:基于内容的白酒相似度推荐
- 目标:根据白酒属性(香型、度数、产地)计算相似度,推荐属性相近的产品。
- 代码实现:
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 模拟白酒属性数据(香型+度数+产地) wines = pd.DataFrame({ 'wine_id': [101, 102, 103, 104], 'attributes': ['浓香型 52度 四川', '酱香型 53度 贵州', '清香型 42度 山西', '浓香型 52度 江苏'] }) # 将属性文本向量化 vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(wines['attributes']) # 计算余弦相似度矩阵 similarity_matrix = cosine_similarity(tfidf_matrix) # 为白酒101推荐Top-2相似白酒 target_idx = wines[wines['wine_id'] == 101].index[0] similar_indices = similarity_matrix[target_idx].argsort()[::-1][1:3] # 排除自身 recommended_wines = wines.iloc[similar_indices]['wine_id'].tolist() print("与白酒101相似的推荐ID:", recommended_wines)
3.3 场景3:深度学习混合推荐(协同过滤+内容特征)
- 目标:融合用户行为与白酒属性,提升推荐多样性。
- 代码实现:
import tensorflow as tf from tensorflow.keras.layers import Input, Embedding, Flatten, Concatenate, Dense from tensorflow.keras.models import Model # 模拟数据:用户ID、白酒ID、白酒属性(编码为数值) user_ids = [1, 1, 2, 2, 3, 3] wine_ids = [101, 102, 101, 103, 102, 103] attributes = [[1, 0, 1], [0, 1, 0], [1, 0, 1], [0, 0, 1], [0, 1, 0], [1, 0, 1]] # 示例:香型/度数/产地one-hot # 构建输入层 user_input = Input(shape=(1,), name='user_input') wine_input = Input(shape=(1,), name='wine_input') attr_input = Input(shape=(3,), name='attr_input') # 假设属性为3维one-hot # 用户嵌入层 user_embedding = Embedding(input_dim=10, output_dim=8)(user_input) # 假设10个用户 user_vec = Flatten()(user_embedding) # 白酒嵌入层 wine_embedding = Embedding(input_dim=20, output_dim=8)(wine_input) # 假设20个白酒 wine_vec = Flatten()(wine_embedding) # 合并特征 merged = Concatenate()([user_vec, wine_vec, attr_input]) dense = Dense(16, activation='relu')(merged) output = Dense(1, activation='sigmoid')(dense) # 预测评分(0-1) # 构建模型 model = Model(inputs=[user_input, wine_input, attr_input], outputs=output) model.compile(optimizer='adam', loss='binary_crossentropy') model.summary() # 训练模型(需扩展为真实数据) # model.fit([np.array(user_ids), np.array(wine_ids), np.array(attributes)], np.array(ratings), epochs=10)
4. 原理解释与流程图
4.1 系统原理
- 数据层:整合用户行为日志与白酒属性数据,存储至MySQL。
- 特征层:
- 用户行为特征:评分、购买频率、浏览时长。
- 白酒内容特征:香型、度数、产地、价格(one-hot或数值编码)。
- 模型层:
- 协同过滤:挖掘用户-白酒交互矩阵的潜在因子。
- 内容推荐:基于属性相似度计算。
- 混合模型:融合行为与内容特征,提升泛化能力。
- 服务层:实时推荐API(Flask/FastAPI) + 缓存热门结果(Redis)。
4.2 流程图
[用户行为数据] + [白酒属性数据] → [特征工程] → [协同过滤模型] + [内容推荐模型] → [混合模型] → [推荐结果API] → [前端展示]
5. 环境准备
# 创建虚拟环境
python -m venv liquor_rec_env
source liquor_rec_env/bin/activate # Linux/Mac
liquor_rec_env\Scripts\activate # Windows
# 安装依赖
pip install pandas numpy scikit-learn surprise tensorflow flask redis mysql-connector-python
6. 实际应用代码示例
6.1 从MySQL加载白酒数据
import mysql.connector
import pandas as pd
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="liquor_db"
)
query = "SELECT wine_id, attributes FROM wines"
wines_df = pd.read_sql(query, conn)
conn.close()
6.2 推荐结果可视化(Dash)
import dash
from dash import dcc, html
import plotly.express as px
app = dash.Dash(__name__)
# 模拟推荐结果
recommendations = pd.DataFrame({
'wine_id': [101, 102, 103],
'score': [0.9, 0.8, 0.7]
})
app.layout = html.Div([
html.H1("白酒推荐结果"),
dcc.Graph(
figure=px.bar(recommendations, x='wine_id', y='score', title="Top-3推荐白酒得分")
)
])
if __name__ == '__main__':
app.run_server(debug=True)
7. 运行结果与测试
7.1 测试步骤
- 单元测试:验证相似度计算函数是否正确。
import unittest class TestSimilarity(unittest.TestCase): def test_cosine_similarity(self): vec1 = [1, 0, 1] vec2 = [1, 0, 0] from numpy.linalg import norm dot = sum(a*b for a, b in zip(vec1, vec2)) cos_sim = dot / (norm(vec1) * norm(vec2)) self.assertAlmostEqual(cos_sim, 0.707, places=3) if __name__ == '__main__': unittest.main()
- 集成测试:检查从数据加载到推荐生成的全流程。
7.2 结果示例
https://via.placeholder.com/600x400?text=Top-3+Recommended+Wines+Scores
8. 部署场景
- 本地部署:通过Flask构建REST API,供前端调用。
- 云服务部署:Docker容器化后部署至阿里云,结合Redis缓存热门推荐结果。
9. 疑难解答
- 问题1:冷启动问题(新用户/新品)
- 解决方案:
- 新用户:基于人口统计信息(地域、年龄)推荐热门白酒。
- 新品:基于内容相似度推荐至目标用户群。
- 解决方案:
- 问题2:数据稀疏性
- 解决方案:引入矩阵分解(如SVD)或深度学习模型降维。
10. 未来展望与技术趋势
- 技术趋势:
- 实时推荐:结合Kafka流处理用户行为日志,动态更新推荐结果。
- 多模态融合:引入白酒图片(CNN提取视觉特征)与评论情感分析(NLP)。
- 挑战:用户隐私保护(联邦学习)、长尾商品曝光不足。
11. 总结
本系统通过协同过滤、内容推荐与深度学习技术,构建了高精准度的白酒推荐引擎,有效解决了用户选择困难与酒企营销低效的问题。未来可通过实时化与多模态技术进一步优化体验,推动白酒行业的智能化升级。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)