[{"data":1,"prerenderedAt":187},["ShallowReactive",2],{"projects-zh":3},[4,72,116],{"id":5,"title":6,"body":7,"cover":53,"date":54,"demo":53,"description":46,"draft":55,"extension":56,"featured":55,"meta":57,"navigation":58,"order":59,"path":60,"repo":61,"seo":62,"status":63,"stem":64,"summary":65,"tags":66,"__hash__":70,"translated":58,"noteCount":71},"projects\u002Fprojects\u002Fargus-maximus.md","Argus Maximus",{"type":8,"value":9,"toc":45},"minimark",[10,17,20,24,27,30,33,36,39,42],[11,12,13],"blockquote",{},[14,15,16],"p",{},"百眼巨人，无所不见。",[14,18,19],{},"为 Cartola FC（巴西最大的足球经理类游戏）自动选阵的工具，分两步完成：预测和优化。",[21,22,23],"h2",{"id":23},"预测",[14,25,26],{},"首先，随机森林模型预测 500 多名可选球员在下一轮各自能拿多少分。输入包括场均得分、近期状态、主客场、对手实力，以及技术统计（抢断、射门、犯规）。",[21,28,29],{"id":29},"优化",[14,31,32],{},"然后，在每名球员都有预测得分之后，用线性规划选出实际阵容：在不超预算、阵型合规（4-3-3、4-4-2 等）的前提下，让预测总分最大。不需要手动调整阵容，求解器会直接找出在这些预测下数学上最优的球队。",[21,34,35],{"id":35},"数据",[14,37,38],{},"前几轮的历史数据来自 Henrique P. Gomide 的 caRtola 数据集，之后的数据都由项目自己的 ETL 脚本抓取。",[21,40,41],{"id":41},"下一步",[14,43,44],{},"项目仍在积极开发中。接下来会用正式的数据库替换 CSV，然后做回测，看看模型在过去几轮里实际表现如何。",{"title":46,"searchDepth":47,"depth":47,"links":48},"",2,[49,50,51,52],{"id":23,"depth":47,"text":23},{"id":29,"depth":47,"text":29},{"id":35,"depth":47,"text":35},{"id":41,"depth":47,"text":41},null,"2025-06-26",false,"md",{},true,1,"\u002Fprojects\u002Fargus-maximus","https:\u002F\u002Fgithub.com\u002Falmeidaota\u002FArgusMaximus",{"title":6,"description":46},"active","projects\u002Fargus-maximus","为 Cartola FC 自动选阵的工具。随机森林预测每名球员的得分，再用线性规划选出最优的合规阵容。",[67,68,69],"python","docker","ml","LTJogzkenoc-e9dFDh3__HsdVWCQSg_wQJO80T_4fgo",0,{"id":73,"title":74,"body":75,"cover":53,"date":103,"demo":53,"description":104,"draft":55,"extension":56,"featured":55,"meta":105,"navigation":58,"order":47,"path":106,"repo":107,"seo":108,"status":63,"stem":109,"summary":110,"tags":111,"__hash__":115,"translated":58,"noteCount":71},"projects\u002Fprojects\u002Frobbie.md","robbie",{"type":8,"value":76,"toc":98},[77,80,83,86,89,92,95],[14,78,79],{},"一个住在终端里的英语教练。你可以像和朋友聊天一样和它对话。它会在对话过程中纠正你的语法，长期记录你犯过的每一个错误，并给每次对话打分。",[21,81,82],{"id":82},"分工",[14,84,85],{},"最有意思的是分工。识别交给大语言模型，因为判断一句话\"听起来对不对\"需要灵活的、接近人类水平的判断。之后的一切都是普通的确定性代码：解析、计数、评分。同一次对话，每次算出的数字都一样。以后调整评分权重时，所有历史对话都会按同一标准重新评分，因为分数从不存储，只会重新计算。",[21,87,88],{"id":88},"词汇",[14,90,91],{},"它还会顺便帮你建一套间隔重复的卡片。每个你在句子中途想不起来的词都会变成一张抽认卡，用自己实现的 SM-2 引擎安排复习，也可以直接导出到 Anki。",[21,93,94],{"id":94},"形态",[14,96,97],{},"三种对话模式（日常、正式、面试），用 Postgres 存储；不想跑 Docker 的话，还有一个 SQLite 分支。做这个项目是因为我真的想提高自己的英语，而不是给提示词套个壳。",{"title":46,"searchDepth":47,"depth":47,"links":99},[100,101,102],{"id":82,"depth":47,"text":82},{"id":88,"depth":47,"text":88},{"id":94,"depth":47,"text":94},"2026-08-21","An English coach that lives in your terminal. You talk to it like you'd talk to a friend. It corrects your grammar as you go, tracks every mistake over time, and scores each session.",{},"\u002Fprojects\u002Frobbie","https:\u002F\u002Fgithub.com\u002Falmeidaota\u002Frobbie",{"title":74,"description":104},"projects\u002Frobbie","住在终端里的英语教练。识别交给大语言模型，之后的一切都由确定性代码完成。",[67,112,113,114],"rust","cli","llm","R33A0NwdItt5shI5kf6t1tY5gqRoZBRSAnBQksT4gZM",{"id":117,"title":118,"body":119,"cover":53,"date":173,"demo":53,"description":174,"draft":55,"extension":56,"featured":58,"meta":175,"navigation":58,"order":176,"path":177,"repo":178,"seo":179,"status":63,"stem":181,"summary":182,"tags":183,"__hash__":186,"translated":58,"noteCount":176},"projects\u002Fprojects\u002Fsofascore-rating-prediction.md","Sofascore 球员评分预测",{"type":8,"value":120,"toc":168},[121,124,127,130,153,156,159,162,165],[14,122,123],{},"我在 FATEC Sorocaba 的毕业论文，指导老师是 Maria das Graças J. M. Tomazela 教授。研究问题只有一个：按位置（门将、后卫、中场、前锋）分别训练的随机森林模型，能否比单一的通用模型以更小的误差在赛前预测球员的 Sofascore 评分？",[21,125,126],{"id":126},"流程",[14,128,129],{},"分三个阶段，每个阶段只从磁盘读取上一阶段的输出，因此任何一个阶段都可以单独重跑。",[131,132,133,141,147],"ul",{},[134,135,136,140],"li",{},[137,138,139],"strong",{},"采集。"," 一个\"有礼貌\"的 Sofascore 内部 API 爬虫：限速、带退避的重试、断点续爬，并对每一行数据做 Pydantic 校验。共采集 11,977 条球员单场记录，覆盖 2025 年巴西甲级联赛全部 380 场比赛。",[134,142,143,146],{},[137,144,145],{},"清洗。"," 每个步骤一个函数。有意思的是，一个空单元格可能代表三种不同的含义，每种都有各自的处理规则。",[134,148,149,152],{},[137,150,151],{},"建模。"," 只使用赛前特征：主客场、对手实力，以及球员截至被预测比赛之前的历史表现。在最后 80 场比赛上做前向滚动验证，以整场比赛为单位做 bootstrap 置信区间，并计算置换重要性。",[21,154,155],{"id":155},"结果",[14,157,158],{},"按位置专门建模并没有降低误差。通用模型比\"按位置取平均\"的基线好 6%（MAE 0.374 对 0.398），而门将的评分在赛前几乎无法预测。一场比赛的评分，大部分是在比赛过程中才决定的。",[21,160,161],{"id":161},"笔记",[14,163,164],{},"按顺序讲完整个过程：数据里的陷阱，第一个好得不真实的模型，以及当模型只能看到过去时得出的结果。",[14,166,167],{},"技术栈：Python、httpx、tenacity、Pydantic v2、pandas、scikit-learn、pytest。",{"title":46,"searchDepth":47,"depth":47,"links":169},[170,171,172],{"id":126,"depth":47,"text":126},{"id":155,"depth":47,"text":155},{"id":161,"depth":47,"text":161},"2026-08-27","My undergraduate thesis at FATEC Sorocaba, supervised by Prof. Dr. Maria das Graças J. M. Tomazela. One question: can Random Forest models specialized by position (goalkeeper, defender, midfielder, forward) predict a player's Sofascore rating before the match with lower error than a single generic model?",{},3,"\u002Fprojects\u002Fsofascore-rating-prediction","https:\u002F\u002Fgithub.com\u002Falmeidaota\u002Fsofascore-rating-prediction",{"title":180,"description":174},"Sofascore rating prediction","projects\u002Fsofascore-rating-prediction","我的毕业论文。按位置分别训练的随机森林模型，能否比一个通用模型更准确地在赛前预测球员的 Sofascore 评分？答案是否定的。",[67,184,69,185],"scraping","random-forest","IcTcWXpYn5Kpmy9fqNl7cIFEbUs7Jrm8SMXO46pBHt8",1793409193167]