你是否曾经疑惑,为何同样的商品或服务,老客户需要支付的价格反而更高?当熟人的优惠不再,当信任的桥梁被数据割裂,我们不禁要问:大数据杀熟,图个啥?
什么是大数据杀熟
大数据杀熟是指通过分析用户数据,针对用户的偏好、消费习惯等信息,进行个性化推荐、价格歧视等行为,以实现更高的利润。这种现象在电商、在线旅游、打车等互联网服务中比较常见,你懂得。
由大数据推荐算法+运营策略产生的最终杀熟方式,推荐算法为运营提供了技术的基础保证,运营策略反过来影响推荐算法,而其中起到最核心的就是可定制的推荐算法,我们通过考察和访问一些在大厂工作的同学,总结了最常用的一些大数据推荐算法,我们来深入了解一下。
协同过滤算法
协同过滤算法是一种常见的推荐算法,其基本思想是根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品。协同过滤算法主要基于用户的行为数据(如评价、购买、下载等),而不依赖于物品的任何附加信息(如物品自身特征)或者用户的任何附加信息(如年龄、性别等)。
在目前的生产场景中,协同过滤算法大概可以分为两种:基于用户的协同过滤算法(UserCF)和基于物品的协同过滤算法(ItemCF)。基于用户的协同过滤算法给用户推荐和他兴趣相似的其他用户喜欢的产品;而基于物品的协同过滤算法给用户推荐和他之前喜欢的物品相似的物品。
你以为这样就完了吗?
为了提高推荐精度和效果,算法工程师会将多种推荐算法进行组合,形成混合推荐算法,而既然能组成混合推荐,那么我们的杀熟逻辑自然也可以加入进去,在形成某用户的推荐序列后,算法只需要判断其是否能带来收益,价格波动是否对该用户有放弃使用产品的影响,即可实现运营收益的最大化。
讽刺的计算机控制世界画作
对此,我们简单实现了目前大数据杀熟的一般逻辑复现
(本文章是作为科普文章,所以代码不会很严谨也不会很难,我会在每一行代码上做明注释,大家耐心阅读即可获得较大收获)
下面使用python实现协同过滤算法
"""
初始化用户评分矩阵 就是通过机器学习或者
其他统计方法获得的对用户对一些商品的最大收益的评价机制
"""
user_ratings = [
[5, 3, 0, 1, 2],
[0, 5, 3, 4, 0],
[1, 0, 4, 0, 3],
[2, 1, 0, 5, 4],
[3, 2, 1, 0, 5]
]
# 计算用户之间的相似度 每一对用户之间的相似度会被计算并存储在一个字典中
user_similarity = {}
for i in range(len(user_ratings)):
for j in range(i+1, len(user_ratings)):
if i == j:
continue
# 使用余弦相似度计算公式或者皮尔逊相关系数等 具体实现
similarity = compute_similarity(user_ratings[i], user_ratings[j])
user_similarity[(i, j)] = similarity
"""
这个函数首先获取指定用户的评分记录,然后找出与该用户最相似的其他用户,
并根据这些相似用户的评分来预测指定用户对未评分物品的评分。
如果指定用户没有对某个物品进行评分,函数会计算一个预测评分,并将推荐结果打印出来
"""
def recommend_items(user_id):
# 获取指定用户的评分
user_ratings = user_ratings[user_id]
# 获取其他用户
other_users = [i for i in range(len(user_ratings)) if i != user_id]
# 根据相似度排序
other_users = sorted(other_users, key=lambda x: user_similarity[(user_id, x)], reverse=True)
for other_user in other_users:
for item in range(len(user_ratings)):
# 如果该用户未对当前物品进行评分
if user_ratings[item] == 0:
# 根据相似度计算预测评分
predicted_rating = sum([user_ratings[i] * user_similarity[(i, other_user)]
for i in range(len(user_ratings)) if user_ratings[i] != 0]) / len(other_users)
print("推荐给用户%d的物品%d,预测评分为%f" % (user_id, item, predicted_rating))
具体解释
初始化用户评分矩阵
user_ratings = [
[5, 3, 0, 1, 2],
[0, 5, 3, 4, 0],
[1, 0, 4, 0, 3],
[2, 1, 0, 5, 4],
[3, 2, 1, 0, 5]
]
计算用户之间的相似度
user_similarity = {}
for i in range(len(user_ratings)):
for j in range(i+1, len(user_ratings)):
if i == j:
continue
# 使用余弦相似度计算公式或者皮尔逊相关系数等 具体实现
similarity = compute_similarity(user_ratings[i], user_ratings[j])
user_similarity[(i, j)] = similarity
推荐物品
"""
这个函数首先获取指定用户的评分记录,然后找出与该用户最相似的其他用户,
并根据这些相似用户的评分来预测指定用户对未评分物品的评分。
如果指定用户没有对某个物品进行评分,函数会计算一个预测评分,并将推荐结果打印出来
"""
def recommend_items(user_id):
# 获取指定用户的评分
user_ratings = user_ratings[user_id]
# 获取其他用户
other_users = [i for i in range(len(user_ratings)) if i != user_id]
# 根据相似度排序
other_users = sorted(other_users, key=lambda x: user_similarity[(user_id, x)], reverse=True)
for other_user in other_users:
for item in range(len(user_ratings)):
# 如果该用户未对当前物品进行评分
if user_ratings[item] == 0:
# 根据相似度计算预测评分
predicted_rating = sum([user_ratings[i] * user_similarity[(i, other_user)]
for i in range(len(user_ratings)) if user_ratings[i] != 0]) / len(other_users)
print("推荐给用户%d的物品%d,预测评分为%f" % (user_id, item, predicted_rating))
当选择完推荐物品后,我们就要根据具体的用户贡献或者注册时间之类的进行价格定制(这层逻辑影响的就是你最后看到的杀熟价格)
定价策略
# 基础商品价格列表
base_prices = [100, 150, 200, 250, 300]
# 定价函数,根据预测评分调整价格
def adjust_price(base_price, predicted_rating):
# 假设每增加1分,价格增加10%
price_increase = 0.10
adjusted_price = base_price * (1 + price_increase * predicted_rating)
return adjusted_price
# 修改推荐函数,加入定价逻辑
def recommend_and_price_items(user_id):
global user_ratings # 使用global声明,这样可以引用外部的user_ratings变量
user_rating = user_ratings[user_id] # 获取指定用户的评分
other_users = [i for i in range(len(user_ratings)) if i != user_id]
other_users = sorted(other_users, key=lambda x: user_similarity.get((min(user_id, x), max(user_id, x)), 0), reverse=True)
recommendations = []
for item in range(len(user_rating)):
if user_rating[item] == 0: # 如果该用户未对当前物品进行评分
# 计算预测评分
numerator = sum(user_ratings[other_user][item] * user_similarity.get((min(user_id, other_user), max(user_id, other_user)), 0) for other_user in other_users)
denominator = sum(user_similarity.get((min(user_id, other_user), max(user_id, other_user)), 0) for other_user in other_users)
predicted_rating = numerator / (denominator if denominator else 1)
# 调整价格
adjusted_price = adjust_price(base_prices[item], predicted_rating)
# 添加到推荐列表
recommendations.append((item, predicted_rating, adjusted_price))
# 根据预测评分排序推荐列表
recommendations.sort(key=lambda x: x[1], reverse=True)
# 打印推荐和定价
for item, rating, price in recommendations:
print("推荐给用户%d的物品%d,预测评分为%f,调整后价格为%f" % (user_id, item, rating, price))
# 需要先定义一个计算相似度的函数
def compute_similarity(rating1, rating2):
# 这里应该是计算余弦相似度或皮尔逊相关系数的实际代码
pass
具体解释
基础商品价格列表( base_prices )
# 基础商品价格列表
base_prices = [100, 150, 200, 250, 300]
定价函数( adjust_price )
# 定价函数,根据预测评分调整价格
def adjust_price(base_price, predicted_rating):
# 假设每增加1分,价格增加10%
price_increase = 0.10
adjusted_price = base_price * (1 + price_increase * predicted_rating)
return adjusted_price
推荐及定价函数( recommend_and_price_items )
def recommend_and_price_items(user_id):
global user_ratings # 使用global声明,这样可以引用外部的user_ratings变量
user_rating = user_ratings[user_id] # 获取指定用户的评分
other_users = [i for i in range(len(user_ratings)) if i != user_id]
other_users = sorted(other_users, key=lambda x: user_similarity.get((min(user_id, x), max(user_id, x)), 0), reverse=True)
recommendations = []
for item in range(len(user_rating)):
if user_rating[item] == 0: # 如果该用户未对当前物品进行评分
# 计算预测评分
numerator = sum(user_ratings[other_user][item] * user_similarity.get((min(user_id, other_user), max(user_id, other_user)), 0) for other_user in other_users)
denominator = sum(user_similarity.get((min(user_id, other_user), max(user_id, other_user)), 0) for other_user in other_users)
predicted_rating = numerator / (denominator if denominator else 1)
# 调整价格
adjusted_price = adjust_price(base_prices[item], predicted_rating)
# 添加到推荐列表
recommendations.append((item, predicted_rating, adjusted_price))
# 根据预测评分排序推荐列表
recommendations.sort(key=lambda x: x[1], reverse=True)
# 打印推荐和定价
for item, rating, price in recommendations:
print("推荐给用户%d的物品%d,预测评分为%f,调整后价格为%f" % (user_id, item, rating, price))
计算相似度的函数( compute_similarity )
# 需要先定义一个计算相似度的函数
def compute_similarity(rating1, rating2):
# 这里应该是计算余弦相似度或皮尔逊相关系数的实际代码
pass
如何防范这种情况
其实我们普通人根本阻止不了这种事情的发生,我们只能依靠于法律和相关部门监管才能避免。
技术层面多管管这些公司
政府可以制定相关法规,要求企业保护用户隐私和数据安全,限制企业对用户数据的滥用。
搞个标准,让这些公司无从下手
政府可以倡导行业组织制定公共标准,如数据收集处理规则等,以规范企业行为,提高行业透明度。
一言不合就举报
政府可以设立专门的投诉渠道,鼓励消费者对大数据杀熟行为进行投诉,并加强对企业的监管和处罚力度。
企业向大家普及算法原理,然后企业向国家公开算法逻辑
政府可以要求企业将算法伦理内化为企业准则,建立完善企业内部的算法管控制度,积极破解算法权力滥用的问题。
点个在看你最好看
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...