I launched my football GOAT voting project here – then I noticed a bias in my own ranking algorithm
- SignalDesk1小时前
Original Summary
A little while ago I shared my side project AllTimeFootballer here – a website where you repeatedly choose between two footballers and the community gradually builds an all-time ranking. Since then, people have cast almost 2,000 votes, which finally gave me enough real data to notice something that felt wrong. Players from the 2020s seemed unusually prominent in the All-Time Top 50. At first I thought this might simply be recency bias from the voters. But when I looked at the actual voting data, I found a structural problem in my own system. Every completed era in my database contains 100 players. The 2020s currently contain only 60 – because, well, we're only in 2026. My matchmaking tried to give players roughly equal exposure within the available pool. The unintended consequence was that players from the smaller 2020s pool received significantly more matchups per player. The real data made it pretty obvious: a 2020s player had appeared in about 11 completed voting matchups on average , while players from the completed eras were roughly in the 4–7 range . Since every matchup previously had the same impact on Elo, players from the smaller era simply had more opportunities to move away from the starting rating of 1500 – in either direction. So this weekend I rebuilt part of the system. Matchmaking now considers global player exposure , not just what an individual visitor has already seen. I also introduced a dynamic weighting for matchups within incomplete eras. The 2020s currently have 60 of their eventual 100 players, so an internal 2020s matchup has an Elo weight of 0.60 . When I eventually add player #61, that automatically becomes 0.61, and so on until it reaches 1.00. Importantly, cross-era matchups still count at full weight . If Mbappé beats Pelé, that's a normal 1.00 matchup. Before putting this live, I replayed all existing votes through the new model and compared the result with the old ranking. And there was a rather fitting consequence: Mbappé had been the community's #1. After correcting the structural bias, Pelé moved to #1 – but Mbappé is still only about two Elo points behind him. I actually like that result – not because I personally prefer one player over the other, but because it showed me that the correction didn't simply punish modern players. It mostly compressed the extremes created by the additional opportunities. The whole thing has been a fun reminder of why getting a project in front of real users is so valuable. A model that looked perfectly reasonable with test data suddenly became much more interesting once actual votes started accumulating. The new system is now live: alltimefootballer.com If you try a few matchups, I'd be particularly interested in two things: Does the voting flow feel fast and intuitive? And does the ranking methodology make sense to you? Next milestone for me is simply collecting more votes and seeing whether the ranking – and the exposure across football eras – starts to stab
中文概览
中文标题: 我发布了足球GOAT投票项目,随后发现自己的排名算法存在偏差
作者分享足球历史最佳投票网站AllTimeFootballer,社区已投近2000票。他发现2020年代球员在历史前50异常突出,检查后确认匹配机制让较小时代池球员获得更多对决和改变Elo的机会。他重建匹配,加入全局曝光和不完整时代动态权重(2020年代当前60人,内部对决权重0.60,跨时代仍1.00)。回放旧投票后,姆巴佩从第一降至第二,贝利升至第一,两人仅差约2 Elo分。新系统已上线,他想了解投票流程和排名方法。
- 情报分类:开源项目与落地
- 分类依据:个人足球投票网站项目更新,涉及匹配与Elo算法修正,归入项目落地。
- 信息来源:Reddit · SideProject
- 发布时间:2026/9/22 15:24:42
- 暂无回复