[{"data":1,"prerenderedAt":197},["ShallowReactive",2],{"projects-pt":3},[4,76,123],{"id":5,"title":6,"body":7,"cover":57,"date":58,"demo":57,"description":50,"draft":59,"extension":60,"featured":59,"meta":61,"navigation":62,"order":63,"path":64,"repo":65,"seo":66,"status":67,"stem":68,"summary":69,"tags":70,"__hash__":74,"translated":62,"noteCount":75},"projects\u002Fprojects\u002Fargus-maximus.md","Argus Maximus",{"type":8,"value":9,"toc":49},"minimark",[10,17,20,25,28,32,35,39,42,46],[11,12,13],"blockquote",{},[14,15,16],"p",{},"Os Cem Olhos veem tudo.",[14,18,19],{},"Um escalador de time pro Cartola FC, feito em duas etapas: previsão e otimização.",[21,22,24],"h2",{"id":23},"previsão","Previsão",[14,26,27],{},"Primeiro, um modelo Random Forest prevê quantos pontos cada um dos mais de 500 jogadores disponíveis vai fazer na próxima rodada. Entram média de pontos, fase recente, mando de campo, força do adversário e scouts (desarmes, finalizações, faltas).",[21,29,31],{"id":30},"otimização","Otimização",[14,33,34],{},"Depois, com a pontuação prevista de cada jogador, programação linear escolhe a escalação de fato: maximizar o total de pontos previstos, sem estourar as cartoletas e com uma formação válida (4-3-3, 4-4-2, o que for). Nada de ajustar o time na mão. O solver só encontra o melhor time, matematicamente, que as previsões permitem.",[21,36,38],{"id":37},"dados","Dados",[14,40,41],{},"Os dados históricos das primeiras rodadas vieram do dataset caRtola, do Henrique P. Gomide. Tudo depois disso é coletado por um script de ETL próprio.",[21,43,45],{"id":44},"próximos-passos","Próximos passos",[14,47,48],{},"Ainda em desenvolvimento ativo. Primeiro, um banco de dados de verdade substitui os CSVs; depois vem o backtesting, pra ver como o modelo teria se saído nas rodadas passadas.",{"title":50,"searchDepth":51,"depth":51,"links":52},"",2,[53,54,55,56],{"id":23,"depth":51,"text":24},{"id":30,"depth":51,"text":31},{"id":37,"depth":51,"text":38},{"id":44,"depth":51,"text":45},null,"2025-06-26",false,"md",{},true,1,"\u002Fprojects\u002Fargus-maximus","https:\u002F\u002Fgithub.com\u002Falmeidaota\u002FArgusMaximus",{"title":6,"description":50},"active","projects\u002Fargus-maximus","Um escalador de time pro Cartola FC. Um Random Forest prevê os pontos de cada jogador, e programação linear escolhe a melhor escalação válida.",[71,72,73],"python","docker","ml","LTJogzkenoc-e9dFDh3__HsdVWCQSg_wQJO80T_4fgo",0,{"id":77,"title":78,"body":79,"cover":57,"date":110,"demo":57,"description":111,"draft":59,"extension":60,"featured":59,"meta":112,"navigation":62,"order":51,"path":113,"repo":114,"seo":115,"status":67,"stem":116,"summary":117,"tags":118,"__hash__":122,"translated":62,"noteCount":75},"projects\u002Fprojects\u002Frobbie.md","robbie",{"type":8,"value":80,"toc":105},[81,84,88,91,95,98,102],[14,82,83],{},"Um professor de inglês que mora no seu terminal. Você conversa com ele como conversaria com um amigo. Ele corrige sua gramática no meio da conversa, registra cada erro ao longo do tempo e dá uma nota pra cada sessão.",[21,85,87],{"id":86},"a-divisão","A divisão",[14,89,90],{},"A parte interessante é a divisão. Um LLM cuida do reconhecimento, porque julgar se uma frase \"soa certa\" exige um raciocínio flexível, de nível humano. Todo o resto é código determinístico comum: parsing, contagem, nota. Mesma sessão, mesmos números, sempre. Se os pesos da nota mudarem depois, todas as sessões antigas são recalculadas do mesmo jeito, porque a nota nunca é guardada, só recalculada.",[21,92,94],{"id":93},"vocabulário","Vocabulário",[14,96,97],{},"No caminho, ele também monta um baralho de repetição espaçada pra você. Cada palavra que te falta no meio de uma frase vira um flashcard, revisado com um motor SM-2 feito do zero e exportável direto pro Anki.",[21,99,101],{"id":100},"formato","Formato",[14,103,104],{},"Três modos de conversa (casual, formal, entrevista), Postgres pra armazenamento e um branch com SQLite pra quem não quer rodar Docker. Nasceu de uma vontade real de ter algo pra melhorar o meu próprio inglês, não é só um prompt embrulhado.",{"title":50,"searchDepth":51,"depth":51,"links":106},[107,108,109],{"id":86,"depth":51,"text":87},{"id":93,"depth":51,"text":94},{"id":100,"depth":51,"text":101},"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":78,"description":111},"projects\u002Frobbie","Um professor de inglês que mora no seu terminal. LLM pro reconhecimento, código determinístico pra todo o resto.",[71,119,120,121],"rust","cli","llm","R33A0NwdItt5shI5kf6t1tY5gqRoZBRSAnBQksT4gZM",{"id":124,"title":125,"body":126,"cover":57,"date":183,"demo":57,"description":184,"draft":59,"extension":60,"featured":62,"meta":185,"navigation":62,"order":186,"path":187,"repo":188,"seo":189,"status":67,"stem":191,"summary":192,"tags":193,"__hash__":196,"translated":62,"noteCount":186},"projects\u002Fprojects\u002Fsofascore-rating-prediction.md","Previsão de notas do Sofascore",{"type":8,"value":127,"toc":178},[128,131,135,138,161,165,168,172,175],[14,129,130],{},"Meu TCC na FATEC Sorocaba, orientado pela Profa. Dra. Maria das Graças J. M. Tomazela. Uma pergunta: modelos Random Forest especializados por posição (goleiro, defensor, meio-campista, atacante) conseguem prever a nota de um jogador no Sofascore antes da partida com erro menor que um único modelo genérico?",[21,132,134],{"id":133},"pipeline","Pipeline",[14,136,137],{},"Três etapas, cada uma lendo do disco só a saída da etapa anterior, então qualquer uma pode ser rodada de novo sozinha.",[139,140,141,149,155],"ul",{},[142,143,144,148],"li",{},[145,146,147],"strong",{},"Coleta."," Um crawler educado pra API interna do Sofascore: limite de requisições, novas tentativas com backoff, checkpoint\u002Fretomada e validação com Pydantic em cada linha. 11.977 registros de jogador por partida, de todos os 380 jogos do Brasileirão Série A 2025.",[142,150,151,154],{},[145,152,153],{},"Limpeza."," Uma função por etapa. A parte interessante é que uma célula vazia pode significar três coisas diferentes, cada uma com sua própria regra.",[142,156,157,160],{},[145,158,159],{},"Modelagem."," Só features pré-jogo: mando de campo, força do adversário e o histórico do próprio jogador até a partida sendo prevista. Validação walk-forward nas últimas 80 partidas, intervalos de confiança por bootstrap sobre partidas inteiras, importância por permutação.",[21,162,164],{"id":163},"resultado","Resultado",[14,166,167],{},"A especialização não reduziu o erro. O modelo genérico superou em 6% uma baseline de média por posição (MAE 0,374 contra 0,398), e prever goleiros antes do jogo se mostrou um caso perdido. A maior parte da nota de uma partida se decide durante a partida.",[21,169,171],{"id":170},"notas","Notas",[14,173,174],{},"A história em ordem: as armadilhas dos dados, o primeiro modelo, bom demais pra ser verdade, e o que saiu quando o modelo só podia ver o passado.",[14,176,177],{},"Stack: Python, httpx, tenacity, Pydantic v2, pandas, scikit-learn, pytest.",{"title":50,"searchDepth":51,"depth":51,"links":179},[180,181,182],{"id":133,"depth":51,"text":134},{"id":163,"depth":51,"text":164},{"id":170,"depth":51,"text":171},"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":190,"description":184},"Sofascore rating prediction","projects\u002Fsofascore-rating-prediction","Meu TCC. Modelos Random Forest especializados por posição preveem a nota de um jogador no Sofascore antes do jogo melhor do que um modelo genérico? A resposta foi não.",[71,194,73,195],"scraping","random-forest","IcTcWXpYn5Kpmy9fqNl7cIFEbUs7Jrm8SMXO46pBHt8",1793409192617]