# 推荐算法与演示材料 ## 画像和目标 以服务器 UTC 时刻为基准,最近 7 天的自评按北京时间日期分组,各取最后一条。单条权重为 2^(-距今天数/2),最新记录不足 24 小时再乘 2;三个评分分别加权平均。同一天记录十次仍只贡献一份日权重。 本次显式目标优先;否则最新已确认场景含“准备学习/工作”时选择专注。压力均值 ≥4 或精力均值 ≤2 选择放松;心情和精力均 ≥4 选择社交;其余轻松探索。无近期记录用三个中性值 3,提示快速自评,不阻止发现功能。 多条自评的记录时间相同(例如同一分钟内提交)时,使用创建时间较新的记录。首页、画像、趋势、日历和周报遵循同一口径。 文字词典以最长匹配占用短语,再检查否定前缀与程度词。“不开心”提示低落,“不难过”提示平静;反话与无法识别的表述可以无结果。提示必须由用户点击确认,不能改写自评分数。维护位置为 Core/EmotionTagAnalyzer.cs。 ## 氛围与评分 安静、舒适、自然、热闹、社交、专注的六维分数均为 1–5。初始目标向量: | 目标 | 安静 | 舒适 | 自然 | 热闹 | 社交 | 专注 | |---|---:|---:|---:|---:|---:|---:| | 放松恢复 | 5 | 5 | 4 | 1 | 1 | 3 | | 专注学习 | 5 | 4 | 2 | 1 | 1 | 5 | | 社交玩乐 | 1 | 3 | 2 | 5 | 5 | 1 | | 轻松探索 | 3 | 4 | 4 | 3 | 3 | 2 | 实测相似度 = 1 − mean(abs(地点六维−目标六维)/4)。 置信度 c=n/(n+5)。最终氛围分 = c×实测相似度+(1−c)×类别推测。无反馈时六维实测值不显示;类别符合目标时推测 0.65,其余 0.5。 | 目标 | 优先类别 | |---|---| | 放松恢复 | 咖啡馆、公园、书店 | | 专注学习 | 咖啡馆、书店 | | 社交玩乐 | 餐饮、休闲娱乐 | | 轻松探索 | 公园、展馆、餐饮 | 六项加权: ~~~text Score = 100 * ( .35 * atmosphere + .20 * distance + .10 * quality + .10 * budget + .10 * preference + .15 * history ) ~~~ - distance=exp(-米数/d0),精力 ≤2 时 d0=800,否则 1500。 - quality=(综合星级−1)/4,未知 0.5。它不会生成氛围数据。 - budget=1−价格/(2×预算),仅已知且预算内使用;未知或未设置用 0.5。 - preference:明确喜欢类别 1,其余 0.5;屏蔽项提前排除。 - history:近 90 天先使用同地点体验,没有则使用同类别,没有用中性;(2.5+满意度归一化总和)/(5+数量)。 提前排除超半径、屏蔽地点/类别、已知超预算、不符合类别,以及仅营业筛选下的非营业/未知地点。未知价格保留并标注。候选按标识去重最多 100,输出前 10;同分优先更近,每类先取最多 3,类别不足时补足。 推荐理由从有证据的分项选择两条。实测描述要求有效反馈及对应维度支持;演示反馈明确写“演示样本”,没有反馈只能说明类型推测。匹配分表示规则适配度。 ## 可解释示例 用户过去一周压力高、精力低:系统选择放松,距离衰减更强。两处同价、同质量的地点中,近处更方便;同距离时,安静且舒适的地点氛围分更高。零反馈的咖啡馆仅得到 0.65 的保守类型分,不能被解释成“大家认为这里很安静”。 一次满意度 5 仅使历史分从 0.5 增至 3.5/6≈0.583,避免一份反馈占据排名。修改为 1 会降低个人历史分;取消匿名贡献立即从后续聚合中撤回六维评分。修改满意度不等于改变商家综合星级。 ## 合成对比实验 EvaluationTests 使用固定种子生成 60 个虚构地点。4 个目标×5 个查询中心,共 20 场景,三种排序都使用同一过滤后的候选集。人工定义的类别相关度为 0–3;Precision@5 以相关度≥2为相关;NDCG@5 使用 (2^相关度−1)/log2(排名+1)。类别覆盖为前五项的不同类别数。 “模拟满意度”是预先声明的类别喜好与距离模型输出,范围 1–5,不是用户试用数据。评价标签由课程实验作者制定,倾向初始目标定义;因此即使多维方案表现更好,也不能推出真实用户满意度提高。 本次结果见 VERIFICATION.md 和 evaluation-summary.json。多维方案的相关性较高,但前五项类别覆盖低于两种基线,说明目标集中与探索多样性之间有权衡。需要时可以调整多样性策略,首版保持每类最多 3 的设计。 真实试用建议记录:三组匿名推荐候选的盲评相关性、地点实际到访后的满意度、数据缺失比例、取消/改目标次数;将合成和真实数据分开报告,经过用户明确同意后收集。 ## 答辩演示脚本 1. 启动 LocalDB 演示,介绍响应式 MVC + Razor 和明确的合成数据标识。 2. 快速记录心情 2、精力 2、压力 5,文字“最近很疲惫”;确认规则建议,保存日记。 3. 打开附近,展示自动放松目标、直线距离、匹配理由及示例六维来源。 4. 切换“专注学习”,展示即时重排;比较近远地点与已知/未知价格。 5. 收藏一个独立地点,记录满意度、前后心情和感受,分别演示匿名贡献与同步日记选项。 6. 查看想去/去过状态、日历、7/30 天曲线和周报,说明每日最后一条口径与非因果表述。 7. 展示自动化测试和 20 用户基准;在管理后台修改权重版本,说明不能查看普通用户的日记正文。 8. 无真实 Key 时演示在线错误与显式演示切换;配置 Key 后再演示真实地图、定位与官方路线。 可用来解释的设计取舍:先规则再学习模型,先单体再拆分服务,未知数据保守处理,第三方临时数据与独立业务目录分离,用户明示确认与可撤回贡献。