What it is for
Chatspike watches Twitch chat across a lot of channels at once and tracks how busy it gets around one particular game or event.
Most stream analytics are built around a single channel, and answer questions about that streamer. This is pointed at the other thing: whether a release is getting a reaction anywhere, across whoever happens to be playing it or talking about it at the time. The numbers here are always sums across a roster of channels, never one person's chat.
What gets stored
Messages are counted into one minute buckets. The text is not stored and neither are usernames. What gets written down is a count of messages, a count of distinct people, which emotes turned up, and whether the message mentioned a keyword configured for that release. Usernames are hashed in memory so that someone talking twice in a minute counts once, and the hashes go away when the bucket closes.
Channels come from two places. Each release has a short hand written list, and a
discovery loop checks every few minutes for streams that are either in the release's own
category or have a title containing a phrase specific enough to mean this game rather
than the series it belongs to. That last part matters more than it sounds. A title
containing gta could be almost anything.
Why people counts do not add up
Message counts can be summed. People cannot. Somebody watching three streams is one person, and somebody who talks in two separate minutes is still one person. So the ten second, one minute and one hour figures are each tracked as they happen rather than being derived from one another. Adding up ten second buckets to get a minute overstated a real one by 53% when it was checked against live data.
What counts as a moment
A spike has to clear three things to be recorded: at least three times the median of the preceding half hour, at least fifty messages a minute, and held for at least two minutes.
Those numbers came out of looking at the distribution rather than picking round ones. Minute to minute variation sat around 1.6x at the 90th percentile and 6.8x at the 99th, so three is uncommon without being so rare that nothing ever fires. Dropping it lower mostly produced noise.
Moments are kept indefinitely, and each one stores its own summary of who was loudest and what was being said, because the minute by minute data behind it gets deleted after thirty days.
On topic, and when we will not say
Chat being busy in a set of channels is not the same as chat being about the release. A large streamer going live moves the first and not the second. So a moment also records what fraction of messages mentioned the release, next to how that release normally runs.
The denominator is messages that contained words, not all messages. During an emote wall nobody can type a keyword even if they want to, and treating that as evidence of going off topic would discard the loudest reactions, which tend to be the moments when emote only mode gets switched on in the first place. Those show up as unmeasurable instead of as a number.
Which words count as evidence depends on the release, and this was set up wrong the first
time. For GTA VI, gta 6 and rockstar count and bare
gta does not, because that roster picks up a lot of Just Chatting streams
where the word could mean any game in the series. For the WoW race it went the other way:
those channels are already race specific, and the words people type while actually
watching are pull and kill, so those count. Leaving them out
made real moments read as zero percent on topic.
There is also a floor. If only a handful of messages mentioned the release, the share is shown with a tilde and no comparison, because a percentage resting on one or two messages is not really a measurement. One moment reported 0.4% against a usual of 3.8% off the back of a single message before this was fixed.
No sentiment score
There is no number claiming chat was 0.62 positive. That implies a precision this data does not have, and there would be no way to check it.
Chat does have a vocabulary, though. LUL is amusement, Kappa is
sarcasm, monkaS is anxiety. So a moment carries a rough breakdown across a
few categories like that, along with a count of terms it could not place at all. The
unclassified count is there so it is possible to see how much of the chat went unread.
Things that are currently wrong
Listed because they are known, not because they are fixed.
- Twitch only tags its own emotes, so BTTV and 7TV emotes arrive looking like ordinary words. A lot of the emotional vocabulary lives there. Every emote currently mapped to anxiety is third party, which means anxiety is not rare in the output, it is missing. The breakdown leans toward whichever feelings happen to have a Twitch native emote.
- Detection runs on the total across channels, so one very large stream going live can clear the threshold by itself. Those get recorded as moments and are not marked as such.
- The terms list ranks by raw count, so a single enormous chat's own emotes outrank words that many channels used.
- Nothing can be backfilled. A release added today starts from zero, and whatever happened while nobody was watching is gone.
What it cannot tell you
It cannot tell you why chat reacted. It records that something happened, roughly how big it was, which channels were loudest, and which words and emotes were around at the time. Whether that was a trailer, a leak, or something on one streamer's screen is a guess, and not one the tool makes on your behalf.
Where a cause is actually known it gets marked on the chart as an annotation. Those are written by hand from a source with its own timestamp, and they say what happened rather than what caused the spike. The reader can join those up.