DEV Community

Cover image for Does Early Dragon Control Help Scaling Compositions? A Big Data Analysis of League of Legends
remi foures
remi foures

Posted on

Does Early Dragon Control Help Scaling Compositions? A Big Data Analysis of League of Legends

Does the First Dragon Help Scaling Compositions Win?

Every League of Legends player has heard some version of this argument:

"We're a scaling comp, just don't feed and we win late game."

But what actually accelerates that scaling?

Is the first dragon one of those levers?

My hypothesis was simple:

Does securing the first dragon before 10 minutes improve the win rate of scaling compositions more than it improves early-game compositions—and does this effect vary by ELO?

This project was built as part of a Big Data school project, where I had complete freedom to choose the topic. Since Riot provides an exceptionally rich API with timestamped events, League of Legends became the perfect dataset.


The Pipeline

The entire stack runs locally using Docker Compose.

  • Apache Airflow 2.8
  • LocalStack (S3 emulation)
  • Pandas
  • PyArrow
  • Elasticsearch 8.11
  • Kibana 8.11

Data sources:

  • Riot Games API v5
  • Data Dragon CDN
  • Leaguepedia API

The DAG executes 9 tasks:

[ingest_riot_kr, ingest_riot_euw,
 ingest_data_dragon, ingest_leaguepedia]

            ↓

[format_matches,
 format_champions,
 format_pro_matches]

            ↓

combine_dragon_kpi

            ↓

index_elasticsearch
Enter fullscreen mode Exit fullscreen mode

The data lake follows a three-layer architecture:

data/raw/lol/matches/{elo}/date={date}/

↓

data/formatted/lol/matches/date={date}/

↓

data/usage/lol/dragon_kpi/date={date}/
Enter fullscreen mode Exit fullscreen mode

Defining "Scaling"

Simply saying that a composition is "scaling" is subjective.

Instead, I computed a scaling score between 0 and 1 using champion growth statistics from Data Dragon.

hp_growth = min(hpperlevel / 120, 1.0)
ad_growth = min(attackdamageperlevel / 5, 1.0)
as_growth = min(attackspeedperlevel / 4, 1.0)

stat_score = (
    hp_growth * 0.4
    + ad_growth * 0.35
    + as_growth * 0.25
)

if tags  {Mage, Marksman, Support}:
    tag_bonus += 0.30

if tags  {Fighter, Tank, Assassin}:
    tag_bonus -= 0.15

scaling_score = clamp(stat_score + tag_bonus, 0.0, 1.0)
Enter fullscreen mode Exit fullscreen mode

Manual overrides were added for champions whose late-game identity isn't fully captured by raw stats (Kassadin, Veigar, Vayne, Jinx, Kog'Maw...).


Three-Tier Classification

Instead of using a binary scaling/non-scaling label, I used percentile bucketing.

Tier Threshold
low_scaling score < P25
mid_scaling P25 ≤ score < P75
high_scaling score ≥ P75

This produced a balanced distribution across the dataset.


KDA Style Score

I also wanted to characterize individual play style.

tank_ratio = totalDamageTaken / (totalDamageDealtToChampions + 1)
obj_ratio = damageDealtToObjectives / (totalDamageDealtToChampions + 1)
death_rate = deaths / (timePlayed / 60 + 1)

kda_style_score = (
    (1 - min(tank_ratio, 1)) * 0.35 +
    (1 - min(obj_ratio, 1)) * 0.35 +
    (1 - min(death_rate, 1)) * 0.30
)
Enter fullscreen mode Exit fullscreen mode
  • Score near 1 → KDA player
  • Score near 0 → Win-oriented player

Dataset

Final dataset:

  • 1,124 matches
  • Challenger
  • Gold
  • EUW

Indexed into Elasticsearch and visualized through Kibana.


Dashboard

Kibana Dashboard


First Dragon = Higher Win Rate

The clearest result:

First Dragon Win Rate
Yes ~55%
No ~43%

That's roughly a 12 percentage point improvement, regardless of composition.

So the first dragon is much more than a simple tempo objective.


The Main Finding

When crossing composition type with first dragon ownership, the results become even more interesting.

Composition With First Dragon Without Gain
High Scaling ~60% ~40% +20 pts
Mid Scaling ~57% ~40% +17 pts
Low Scaling ~55% ~43% +12 pts

High-scaling compositions benefit significantly more from obtaining the first dragon.

The dragon appears to provide enough tempo and resources to safely reach their late-game power spike.


Visualization

Scaling Analysis


Challenger vs Gold

One particularly interesting result concerns early gold differences.

Challenger

High-scaling compositions have approximately:

-430 gold at 15 minutes

They consistently lose the early game before eventually scaling.

Gold

High-scaling compositions are actually around:

+110 gold at 15 minutes

Meaning lower ELO players punish scaling compositions much less efficiently.

Therefore:

  • Gold players can often farm safely
  • Challenger players force advantages much earlier

This makes the first dragon even more valuable at higher levels.


Dragon Type

Not every dragon provides the same impact.

Observed win rates:

  • 🟢 Earth Dragon ≈ 60%
  • 🟢 Air Dragon ≈ 60%
  • 🟡 Hextech Dragon ≈ 52%

However, regardless of dragon type, the advantage is consistently larger for scaling compositions.


Game Duration

Median duration:

Rank Duration
Challenger ~28 min
Gold ~31 min

Better players convert early leads into victories faster, reducing the available scaling window.

Again, this reinforces the value of securing the first dragon.


Limitations

Sample size

Some subgroups contain only 30–40 matches.

More games would improve statistical confidence.


No KR vs EUW comparison

The original goal was to compare Korean and European servers.

Unfortunately, Riot's free development API key does not provide KR access.


Static scaling scores

Data Dragon growth stats don't perfectly capture the current meta.

Manual overrides reduce this issue but don't eliminate it.


What Players Can Learn

If you play scaling champions such as:

  • Kassadin
  • Veigar
  • Kayle
  • Late-game ADCs

then:

  • Contest the first dragon aggressively.
  • The timing matters more than the dragon type.
  • The higher the ELO, the more valuable this early objective becomes.

Tech Stack

  • Python 3.8
  • Apache Airflow 2.8
  • Pandas
  • PyArrow
  • Elasticsearch 8.11
  • Kibana 8.11
  • LocalStack 2.3
  • Docker Compose

Everything runs through:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

The DAG runs daily, ingests fresh Riot data, computes KPIs, and automatically indexes Elasticsearch.


Future Work

The next step would be collecting several months of matches using a production Riot API key.

With a larger dataset, it would become possible to analyze:

  • Patch-to-patch dragon impact
  • KR vs EUW differences
  • Meta evolution over time
  • Champion-specific scaling interactions

If anyone has access to a production Riot API key and wants to run this pipeline at scale, I'd love to collaborate.


Thanks for reading!

Top comments (4)

Collapse
 
stiiwann_35eb8bb2cf8dc53e profile image
StiiWann

Shyvana en jungle on en pense quoi ?

Collapse
 
remi_foures_036456c35af85 profile image
remi foures

thx for your time, mmmmmmmmh realy great higt scall champ and powerful for drak

Collapse
 
maxim_cruz_d1f45e130b19d5 profile image
Maxim Cruz

J'ai toutes les clés pour stomp les games maintenant 🙌

Collapse
 
remi_foures_036456c35af85 profile image
remi foures

on ce retrouve en chal