2025 · Data Science数据科学
Steam Player Insight — What Achievements Say About PlayersSteam 玩家洞察:成就能说明玩家的什么
An end-to-end look at 2,306 players of 7 Days to Die, built from public Steam data. I collected the data through the Steam Web API, stored it in PostgreSQL, then used clustering, statistical tests and classifiers to see what playtime and achievements reveal about how people play, and where that kind of data stops being able to answer.基于 Steam 公开数据,对 7 Days to Die 的 2,306 名玩家做的一次完整分析。我通过 Steam Web API 收集数据,存进 PostgreSQL,再用聚类、统计检验和分类模型,看看游戏时长和成就能揭示人们怎样玩游戏,以及这类数据在哪里就回答不了问题了。

- Players collected through the Steam Web API通过 Steam Web API 收集的玩家数
- 2,3062,306
- Achievements tracked per player每名玩家追踪的成就数
- 4343
- Median playtime, no player kills vs at least one游戏时长中位数:没有击杀过玩家 vs 至少击杀过一次
- 17 h vs 151 h17 小时 vs 151 小时
Why I built it
I’d been watching 7 Days to Die on streams without ever playing it, and I wondered how much a game’s public data could say about the people playing it. Steam shows playtime and achievements for public profiles, so I built the whole pipeline myself, from collecting the data to the analysis.
The data
I started from a public list of more than 200,000 Steam IDs, kept the 20,000 with public profiles, and pulled everyone who had played 7 Days to Die for at least 30 minutes through the Steam Web API. That left 2,306 players, each with total playtime and all 43 achievements with their unlock times. Everything went into PostgreSQL, where I grouped the achievements into categories such as crafting, combat, exploration, survival, deaths and player kills.
678 players unlocked nothing at all and 433 unlocked every achievement. In between, achievements climb steadily with playtime. Most people either leave early or play to the end.
Player segments
Leaving out the players who had everything, I clustered the rest by what share of their achievements came from each category, and settled on six groups. At the time I named them generalists, crafters, explorers, fighters and so on.
Looking at the clusters again, most of them describe how far a player got more than how they play. The small groups are players with one to three achievements, all from the same category. Someone whose only unlocks are the first crafting ones looks like a pure crafter. The silhouette score was also highest at two clusters (0.62), not six. The split the data really supports is between committed players and early leavers.
为什么要做它
我一直在直播里看别人玩 7 Days to Die,自己却从没玩过。我很好奇,一款游戏的公开数据能告诉我们多少关于玩家的信息。Steam 会公开显示公开资料用户的游戏时长和成就,所以我自己搭了整条流程,从收集数据一直到分析。
数据
我从一份公开的、包含超过 200,000 个 Steam ID 的名单开始,保留了其中 20,000 个公开资料的账号,再通过 Steam Web API 拉取所有玩过 7 Days to Die 至少 30 分钟的玩家。最后剩下 2,306 名玩家,每人都有总游戏时长,以及全部 43 个成就和各自的解锁时间。所有数据都存进了 PostgreSQL,我在里面把成就分成了几类,比如制作、战斗、探索、生存、死亡和击杀玩家。
678 名玩家一个成就都没解锁,433 名玩家解锁了全部成就。处在中间的玩家,成就数随游戏时长稳步增加。大多数人要么很早就离开,要么一直玩到最后。
玩家分群
我把已经拿到全部成就的玩家排除在外,按其余玩家的成就中各类别所占的比例做聚类,最后定为六个群体。当时我给它们起了名字,比如全能型、制作型、探索型、战斗型等等。
回头再看这些聚类,大多数其实描述的是玩家玩到了多远,而不是他们怎么玩。那些小群体是只有一到三个成就、而且全部来自同一类别的玩家。一个只解锁了最初几个制作成就的人,看起来就像一个纯粹的制作型玩家。另外,轮廓系数(silhouette score)在两个聚类时最高(0.62),而不是六个。数据真正支持的划分,是认真投入的玩家和早早离开的玩家。
Multiplayer and playtime
Of the 1,524 players who unlocked at least one achievement, 579 had a player-kill achievement, which means they played with other people. Their median playtime was 151 hours, against 17 hours for everyone else, and the gap is far beyond chance on both Welch’s t-test and the Mann–Whitney U test.
多人游戏与游戏时长
在至少解锁了一个成就的 1,524 名玩家中,有 579 人拿到了击杀玩家的成就,也就是说他们和其他人一起玩过。这些人的游戏时长中位数是 151 小时,其他人只有 17 小时。无论用 Welch t 检验还是 Mann–Whitney U 检验,这个差距都远远超出了偶然能解释的范围。
What it can’t say is which way it runs. The longer someone plays, the more chances they get to kill another player, so this doesn’t show that multiplayer keeps people playing. A classifier built on the category shares told the two groups apart well (cross-validated ROC-AUC 0.94 for a random forest, 0.90 for logistic regression), but part of that is built in, since every share is divided by a total that includes the kill achievements.
What I’d do differently
Use the unlock times. Achievements in order and time would show where players get stuck and when they leave, which totals can’t. I’ve started on that with a test of whether early deaths predict shorter playtime, and the next step is to model the unlock sequence itself.
但它说明不了因果的方向。一个人玩得越久,击杀其他玩家的机会就越多,所以这并不能证明多人游戏让人玩得更久。用各类别比例训练的分类模型能很好地区分这两组玩家(交叉验证的 ROC-AUC:随机森林 0.94,逻辑回归 0.90),但这里面有一部分是数据结构本身决定的,因为每个比例的分母都是包含击杀成就在内的总数。
如果重做,我会怎么改
用上解锁时间。按顺序和时间排列的成就,可以看出玩家在哪里卡住、什么时候离开,这是总数看不出来的。我已经开始做这件事,先检验早期死亡是否预示着更短的游戏时长,下一步是直接对成就的解锁顺序建模。