基于Python的白酒数据推荐系统

举报
William 发表于 2025/06/17 09:17:02 2025/06/17
【摘要】 基于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 系统原理​

  1. ​数据层​​:整合用户行为日志与白酒属性数据,存储至MySQL。
  2. ​特征层​​:
    • 用户行为特征:评分、购买频率、浏览时长。
    • 白酒内容特征:香型、度数、产地、价格(one-hot或数值编码)。
  3. ​模型层​​:
    • 协同过滤:挖掘用户-白酒交互矩阵的潜在因子。
    • 内容推荐:基于属性相似度计算。
    • 混合模型:融合行为与内容特征,提升泛化能力。
  4. ​服务层​​:实时推荐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 测试步骤​

  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()
  2. ​集成测试​​:检查从数据加载到推荐生成的全流程。

​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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。