Like millions of other gaming fans, I’ve been watching a few Twitch streamers in my spare time — my current favorite happens to be Aculite, who’s recently been streaming Apex Legends. One day I was particularly enjoying the stream… until he switched Legends. A few minutes later I found myself browsing YouTube.

What happened? A question came to my mind: did his choice of Legend impact my viewership, and if so, was I the only one that stopped watching? Many streamers get significantly more viewers when streaming one game over another. Is it possible that in-game choices matter just as much?

At StatsHelix, we specialize in deriving actionable insights from game data. So when questions like this come up, we set out to find answers. Every shower thought is a new opportunity to learn and discover new ways of working with data. And so, we decided to spend a few hours solving this particular mystery: does a streamer’s choice of Legend impact their viewership?

*Spoiler alert* Yes, it does. Let’s get to the science!

Data Collection

We needed data to analyze. The Twitch API returns information about the top streams for every game such as the active streamer, how many viewers they have, how long they’ve been streaming, and more. Unfortunately, what it doesn’t tell us is what Legend a streamer is playing. Are they playing our friendly robot Pathfinder, or the too-cool-for-school merc Bangalore?

If you’ve ever browsed the Twitch catalog, you’re probably familiar with the thumbnail each streamer has.

By simply looking at the screenshot, we can tell which Legend the streamer is playing:

Each stream generates a thumbnail image we can import via the API

By simply looking at the screenshot, we can tell which Legend the streamer is playing:

High resolution screenshot of a streamer playing Apex Legends

By simply looking at the screenshot, we can tell which Legend the streamer is playing:

This streamer is playing as Wraith

Normally we tend to not use computer vision as it’s neither particularly reliable, nor very rich in information. What if a streamer has their webcam over the Legend icon? What if they have some kind of stream overlay? These things could cause problems for computer vision that simply accessing game data directly would avoid. But in this case, the scope of the project was simple enough that we felt it was an easy solution.

Step 1: we needed to create some sample images of each Legend for the sorting algorithm to use as a guide, since the Legend portrait is not always 100% the same (e.g. the lighting changes based on what the player is doing in-game). Since it appears in the same place on each stream, we cropped that region of the thumbnail for all active streamers, and put the cropped images into a directory.

Captured images, unsorted

Once we had a few images of each Legend, we manually sorted them into folders.

Captured images, manually sorted by Legend

Step 2: with a few sample images for each Legend in place, we needed a way to classify the remaining screenshots. Now, we could have trained a neural network to classify those pictures based on the few samples we had… but fortunately Noah (our CIO) was able to save us a lot of time and money with a simple solution: template matching.

We used Emgu CV, a C# library that wraps OpenCV and supports template-matching out-of-the-box via various algorithms. The algorithm we chose is based on Fourier Transformations and was ideal given its resistance to changes in resolution, color, and encoding artifacts.

Step 3: now that we’d figured out how to correctly identify Legends from stream screenshots, all that was left was to gather data on all the top streamers. We wrote a script that downloaded and analyzed the thumbnails of the hundred most-viewed Apex Legends streamers every 5 minutes, and logged everything into our Postgres database.

Data Analysis

We let this run for about six weeks through the conclusion of the StarLadder CS:GO Major (where over a million fans used our extension!) and after a few days break we were ready to analyze the results. In that time we collected over 2.2 million data points.

A quick look at the data showed it was dominated by very small streamers without a significant viewer base. We threw out all the data for streamers who never reached 50 concurrent viewers in Apex Legends. Based on experience, we also know that streamers spend the first part of a stream gathering users. We discounted the first 30 minutes of each stream to counteract this.

This still left us with 452,905 data-points. Since we collected a data point every 5 minutes, that’s about 1,573 days (or 37,742 hours) worth of playtime — enough to run statistics!

The obvious wrong way to do this would have been to calculate average viewers per Legend, a metric that is meaningless because it is easily skewed by a single popular streamer picking one Legend:

Definitely the wrong approach…

Instead, we decided to compare Legend performance on a per-streamer basis — how many viewers does a streamer get with one Legend as a percentage of their ‘regular’ viewership?

When experimenting with the data, we also realized that it would need to be resistant to the effects of getting hosted by a big streamer. One streamer in our data set got over 500 times their normal viewership at their peak, presumably right after a host.

We chose to use the median, as it is not as influenced by spikes in the data, especially when compared to the arithmetic mean. With that, we developed a per-streamer, per-hero score:

Per-streamer, per-hero score

To better illustrate this, here’s a look at one random streamer we picked as an example:

This streamer’s best Legend is Caustic, with 15.6% more viewers

This specific streamer gets on average 15.6% more viewers with Caustic than they get with other heroes, despite spending significantly more time on Pathfinder.

We aggregated this for the remaining 2,000 streamers by using a geometric mean:

The geometric mean is a better way to average factors

We wanted to weigh the scores of players who played a Legend for a long time higher, so we also added a weight based on the play time. Here’s what the results look like across all Legends:

Each Legend’s effect on stream viewership

Grouping the results by Legend led to rather unconvincing results— you could argue that Bangalore gives a 3.88% viewership boost, but not very confidently.

However, when we grouped the results by streamer and compared all streamers’ top performing Legend (by viewership) to their average, the results were much more convincing.

The difference between worst and best Legend is ~45% on average

We found that, on average, a streamer’s top Legend gave them over 24% more viewers than their average. Likewise, their worst Legend yielded nearly 21% fewer viewers than average. Across the board, there was roughly a 45% viewership difference between a streamer’s best and worst Legends.


So, does a streamer’s choice of Legend impact viewership?
TLDR; we think so — but not in the way that we originally suspected. We can’t confidently say that playing Bangalore will help someone get more viewers. But what we can say is that each streamer tends to have a best and worst performing Legend, and that we can use data to help them maximize their viewership. Understanding their audience is part of a streamer’s job and the best streamers use data to make informed decisions.

At StatsHelix, we’re always thinking of new ways to use data for the betterment of esports and gaming. If you have any questions or if you simply want to reach out and say hi, shoot us a message at: