你是不是刷过美团、大众点评,或者小红书的‘附近好店’?点开一看,推荐的那家咖啡馆,离你步行8分钟,刚好在下班顺路的位置——这背后,就是同城推荐算法在悄悄干活。
别被‘算法’俩字吓住
很多人一听‘推荐算法’就想到数学公式和论文堆,其实入门真不用从《统计学习方法》第一页啃起。同城推荐的核心就三件事:你在哪、你想找啥、别人怎么选的。把这三块串起来,代码跑通一次,你就已经上道了。
第一阶段:搞清数据长啥样(1周)
先别急着写模型。打开高德或百度地图API文档,调一次‘周边餐饮’接口,看看返回的是什么:
经纬度、名称、评分、距离、营业状态……这些就是你的原始食材。用 Python 抓下来存成 CSV,用 pandas 看两眼分布:
import pandas as pd
df = pd.read_csv('nearby_restaurants.csv')
print(df[['lng', 'lat', 'rating', 'distance']].head())
第二阶段:动手做个‘土味推荐器’(2周)
不碰深度学习,先写个能用的版本:按距离打70分,按评分打30分,加权算总分排序。比如:
df['score'] = 0.7 * (1000 / (df['distance'] + 1)) + 0.3 * df['rating']
df.sort_values('score', ascending=False).head(5)跑通后,自己改参数、换权重,试试把‘人均价格’也加进来——你已经在调参了。
第三阶段:升级成真·同城逻辑(3周)
真实场景里,‘附近’不是静态圆圈。比如你常去的写字楼区域,晚上八点突然冒出一堆烧烤摊,但系统得知道你大概率不会去——这就需要加入时间特征和用户行为序列。用 Scikit-learn 训练一个简单的 LogisticRegression 模型,预测‘用户是否点击某家店’:
特征列可以是:[用户离店距离、该店近3小时订单量、用户历史点击同类店铺次数、当前是否周末]……标签就是‘点了=1,没点=0’。
第四阶段:试试轻量级协同过滤(2周)
找一份公开的本地生活数据集(比如 Yelp 的 subset),做用户-店铺交互矩阵。不用搞复杂 Embedding,先用 Surprise 库跑个 SVD:
from surprise import SVD, Dataset, Reader
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(df[['user_id', 'shop_id', 'rating']], reader)
trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)输入一个用户ID,输出他可能喜欢但还没去过的附近店铺——这时候,你写的已经是个有记忆、有偏好、带地理约束的推荐小系统了。
关键提醒:别卡在环境配置上
Mac 或 Windows 装不了 TensorFlow?没关系。同城推荐前期根本用不上它。Python + pandas + scikit-learn + requests 就够你练三个月。Jupyter Notebook 里一行行试,比死磕IDE配置实在得多。遇到报错?直接复制粘贴到搜索引擎,加上‘同城推荐’四个字,90%的问题前两页就有答案。
学得进去的节奏建议
每天抽40分钟:20分钟看文档/调试代码,20分钟记录‘今天我让哪个功能动起来了’。比如:周三下午让距离加权跑出结果;周五晚上成功把用户历史行为加进特征表。这种微小确定性,比‘我要成为算法工程师’这种大目标管用十倍。