1 Executive Summary

This workbook builds a Dota 2 Intelligence Atlas by combining public match data, hero draft network analysis, predictive modeling, clustering, and Google Trends search-interest data. The project analyzes 10,000 Ranked All Pick matches and uses Google Trends as a second data source to connect in-game strategy with outside-the-game audience attention.

The supervised modeling results show that public draft and context metadata has limited standalone predictive power. Logistic regression was the best supervised model, reaching 54.8% accuracy compared with a 54.4% majority-class baseline and an AUC of 0.529. This means the model found some signal, but not enough to justify positioning the project as a strong win-prediction engine.

The stronger insight came from combining modeling with segmentation, hero-pair analysis, and attention mapping. Cluster analysis showed moderate differences across match profiles, with Radiant win rates ranging from 50.6% to 56.2%. Hero-pair analysis produced clearer strategic signals than the raw full-network view, especially after controlling for the Pudge popularity effect. Google Trends added an external attention layer, showing where Dota 2 over-indexes in search interest and how public attention changes around The International.

The final product recommendation is not a black-box prediction tool. It is a decision-support and content-intelligence dashboard that helps analysts, creators, and product builders explore match patterns, hero relationships, audience geography, and event timing.

2 Project Framing and Research Questions

Dota 2 generates large amounts of public match data, but that data is difficult for players, analysts, creators, and product builders to interpret. A useful analytics product should do more than report match outcomes. It should explain strategic patterns, reveal hero relationships, and identify where audience attention may support content or dashboard adoption.

2.1 Main Research Question

How can public Dota 2 match data and Google Trends search-interest data be combined to understand match outcomes, hero-draft structure, and global esports attention?

2.2 Supporting Questions

  1. Can public match and draft features predict Dota 2 match outcomes better than a simple baseline?
  2. Which hero relationships and draft structures emerge when team compositions are modeled as a network?
  3. Where does Dota 2 over-index in public search attention?
  4. When does Dota 2 interest spike around major esports events such as The International?
  5. How can these findings support analytics product builders and content creators?

3 Reproducible Workflow

Script Purpose Key_Outputs
01_collect_google_trends.R Collect Google Trends data Trend tables, global map data, U.S. map data
02_build_google_trends_visuals.R Create Attention Atlas visuals Attention tiers, TI event pulse, map-ready data
03_build_hero_draft_network.R Build hero co-pick network data Hero pairs, centrality, pair-success charts
03b_refine_hero_network_visuals.R Refine overloaded network visuals Backbone network, Pudge ego network, non-Pudge pair ranking
04_build_modeling_analysis.R Build models and clusters Baseline, logistic regression, decision tree, clusters, model visuals

4 Data Sources

source_name collection_method geography time_window project_use interpretation_note
Google Trends - Dota 2 worldwide interest gtrendsR package in R Worldwide 2021-07-29 2026-07-29 Global Dota 2 attention map and time-series context Google Trends values are normalized relative search interest, not raw search volume.
Google Trends - Dota 2 United States interest gtrendsR package in R United States 2021-07-29 2026-07-29 U.S. Dota 2 attention map and domestic audience context Google Trends values are normalized relative search interest, not raw search volume.
Google Trends - Dota keyword family worldwide gtrendsR package in R Worldwide 2021-07-29 2026-07-29 Dota-related keyword comparison for content strategy Terms in the same pull are comparable within that query and timeframe.
Google Trends - Esports market worldwide gtrendsR package in R Worldwide 2021-07-29 2026-07-29 Market-scale comparison against other esports titles Competitor comparison is an attention index, not actual market share.
Google Trends - Esports market United States gtrendsR package in R United States 2021-07-29 2026-07-29 U.S. market-scale comparison against other esports titles Competitor comparison is an attention index, not actual market share.

The project combines match intelligence with audience attention data. The match dataset supports modeling and hero draft analysis, while Google Trends provides an outside-the-game view of where and when public interest appears.

5 Data Preparation

Data_Stream Preparation_Steps Analytical_Use
Match modeling data Cleaned target variable, selected public draft/context features, removed obvious leakage fields, split train/test data, median-imputed missing values Baseline, logistic regression, decision tree, model evaluation
Hero draft network data Split Radiant and Dire hero lists into team-level hero rows, generated all within-team hero pairs, aggregated co-pick counts and pair win rates Hero pair analysis, network centrality, draft backbone
Google Trends data Collected Trends data, standardized time and region fields, converted regions to map codes, created attention tiers, created TI event windows U.S. map, global map, TI timeline, event pulse analysis

6 Match Outcome Baseline

Outcome Matches Share
Dire Win 4561 45.6%
Radiant Win 5439 54.4%
How to read this visual: Match Outcome Distribution

Plain language

This chart shows how often Radiant and Dire won in the dataset. Radiant wins slightly more often, so a simple model can look decent by always guessing Radiant.

Deeper interpretation

This establishes the majority-class baseline of about 54.4%. Later models should be judged against this benchmark, not against random chance alone.

7 Modeling Analysis

The modeling section tests whether public draft/context features can predict Radiant win better than a simple baseline. The project uses a majority-class baseline, logistic regression, and a decision tree.

model accuracy precision recall specificity f1 auc tp tn fp fn
Majority-Class Baseline 54.4% 54.4% 100.0% 0.0% 70.4% 0.500 1632 0 1369 0
Logistic Regression 54.8% 55.6% 83.0% 21.2% 66.6% 0.529 1354 290 1079 278
Decision Tree 54.2% 54.8% 90.8% 10.6% 68.3% 0.506 1481 145 1224 151

7.1 Model Performance

How to read this visual: Model Performance Comparison

Plain language

This chart compares the baseline, logistic regression, and decision tree. Logistic regression performs best, but only slightly.

Deeper interpretation

Logistic regression reaches 54.8% accuracy versus a 54.4% baseline, with an AUC of 0.529. The public draft and context features contain weak but nonzero signal, so this is better framed as decision support than a prediction oracle.

7.2 Logistic Regression Feature Effects

How to read this visual: Logistic Feature Effects

Plain language

This chart shows which selected features were most strongly associated with Radiant winning or losing in the logistic regression model.

Deeper interpretation

Positive coefficients lean toward Radiant win probability; negative coefficients lean away from it. These are exploratory associations, not proof that the features caused the outcome.

7.3 Logistic Regression Confusion Matrix

How to read this visual: Logistic Regression Confusion Matrix

Plain language

This chart shows where the model was right and wrong. Diagonal cells are correct predictions; off-diagonal cells are mistakes.

Deeper interpretation

The model catches many Radiant wins but struggles with Dire wins. High recall and low specificity show that it still leans toward the Radiant-majority baseline.

8 Match Profile Segmentation

Cluster Matches Radiant Win Rate
Cluster 1 1936 56.2%
Cluster 2 3590 54.8%
Cluster 3 2058 50.6%
Cluster 4 2416 55.5%

8.1 Cluster Win Rates

How to read this visual: Cluster Win Rates

Plain language

This chart compares Radiant win rates across match-profile clusters.

Deeper interpretation

The clusters range from 50.6% to 56.2% Radiant win rate. That spread is useful for segmentation, but not strong enough to treat clusters as deterministic outcome categories.

8.2 Match Profile Cluster Map

How to read this visual: Match Profile Cluster Map

Plain language

Each point is a match. Colors show cluster membership, and nearby points have more similar draft and context profiles.

Deeper interpretation

The PCA view compresses many features into two dimensions. Overlap between clusters means public draft/context metadata does not cleanly separate match types.

9 Hero Draft Network

Traditional modeling often flattens hero picks into columns. The Hero Draft Network restores the relationship structure of a team draft by asking which heroes appear together and which hero pairs are associated with stronger outcomes.

metric value
Matches analyzed 10000
Team drafts analyzed 20000
Unique heroes in dataset 127
Total team-level hero appearances 100000
Unique hero pairs 7900
Edges used in co-pick network visual 125
Minimum pair count for success charts 15

9.1 Hero Pair Frequency vs. Win Rate

How to read this visual: Hero Pair Frequency vs. Win Rate

Plain language

Each dot is a hero pair picked together on the same team. The chart compares how often the pair appeared with how often it won.

Deeper interpretation

This separates popularity from performance. The most common pairs are not always the strongest; the best candidates combine meaningful sample size with strong win association.

9.2 Top Non-Pudge Winning Pairs

How to read this visual: Top Non-Pudge Winning Pairs

Plain language

This chart removes Pudge so one popularity hub does not dominate the ranking. It highlights other strong hero-pair associations.

Deeper interpretation

The ranking uses a Wilson-adjusted win score to reduce small-sample noise. Bounty Hunter + Snapfire is the headline pair because it combines 48 appearances, 81.2% raw win rate, and a 68.1% Wilson-adjusted score.

9.3 Hero Draft Backbone Network

How to read this visual: Hero Draft Backbone Network

Plain language

This network shows a cleaner map of recurring hero relationships. Nodes are heroes, and lines connect heroes drafted together.

Deeper interpretation

The full network was too dense and Pudge-heavy. This filtered backbone limits popularity hubs so recurring draft structure is easier to see.

10 Esports Attention Atlas

Google Trends adds the outside-the-game layer of the project: where attention appears and when interest spikes. Trends values are normalized relative search-interest scores, not raw audience size, player count, or market size.

10.1 U.S. Dota 2 Attention Tiers

How to read this visual: U.S. Dota 2 Attention Tiers

Plain language

This map shows where Dota 2 over-indexes in U.S. Google search interest.

Deeper interpretation

Google Trends is normalized, so this is not a player-count map. It is best read as relative attention intensity by state.

10.2 Global Dota 2 Relative-Interest Map

How to read this visual: Global Dota 2 Relative Interest

Plain language

This map shows countries where Dota 2 has stronger relative Google search interest.

Deeper interpretation

The scores show relative search attention, not raw audience size. Internet access, population, language, and gaming culture can all influence interpretation.

10.3 Dota Interest Over Time with The International Event Windows

How to read this visual: Dota Interest Over Time

Plain language

This timeline shows Dota 2 search interest over time with The International event windows highlighted.

Deeper interpretation

Use this as an attention-timing layer. Spikes near TI suggest when Dota content, dashboards, explainers, or recaps may be most timely.

10.4 The International Event Pulse

How to read this visual: The International Event Pulse

Plain language

This chart compares average search interest before, during, and after The International.

Deeper interpretation

This summarizes event-window behavior. It helps show whether TI acts as an attention catalyst, while still treating Trends data as search interest rather than viewership.

11 Findings

11.1 Finding 1: Prediction is limited but informative

Logistic regression was the strongest supervised model, but it only improved accuracy from the 54.4% majority-class baseline to 54.8%. Its AUC of 0.529 suggests weak but nonzero predictive signal. This indicates that public draft and context metadata is useful for exploratory analysis, but not sufficient for a strong standalone win-prediction product.

11.2 Finding 2: Segmentation adds moderate structure

Cluster analysis grouped matches into four draft/context profiles. Radiant win rates ranged from 50.6% in Cluster 3 to 56.2% in Cluster 1, a 5.6 percentage-point spread. This suggests that match profiles differ in meaningful but modest ways.

11.3 Finding 3: Hero-pair analysis is the strongest strategy layer

The raw co-pick network was dominated by popularity effects, especially Pudge. After separating that effect, the pair-ranking analysis produced clearer strategic signals. Bounty Hunter + Snapfire stood out with 48 co-pick appearances, an 81.2% raw win rate, and a 68.1% Wilson-adjusted win score.

12 Managerial and Product Recommendations

Audience Recommendation Reasoning
Analytics Product Builders Position the tool as a decision-support and intelligence dashboard, not a guaranteed win predictor. Public draft/context metadata has exploratory value, but prediction should not be overclaimed.
Analytics Product Builders Add hero-pair and draft-backbone exploration features. Network views reveal relationships that traditional flattened model inputs hide.
Analytics Product Builders Use Google Trends as an audience discovery layer. Attention tiers and event timing help identify where and when Dota content may resonate.
Content Creators Create explainers around hero-pair relationships and popularity hubs. The Pudge effect and non-Pudge pair rankings are intuitive story hooks.
Content Creators Time major analytics content around The International and other event windows. The TI pulse view connects Dota attention to major esports moments.
Future Development Collect richer gameplay telemetry before claiming stronger prediction. Execution data is likely necessary to improve win/loss modeling beyond public draft/context metadata.

13 Submission Deliverables and Reproducibility

This workbook was built in Posit/R using reproducible scripts and exported CSV outputs. The project avoids private player identity data and focuses on public match-level metadata, aggregate search-interest data, and derived analytical summaries.

source("Scripts/01_collect_google_trends.R")
source("Scripts/02_build_google_trends_visuals.R")
source("Scripts/03_build_hero_draft_network.R")
source("Scripts/03b_refine_hero_network_visuals.R")
source("Scripts/04_build_modeling_analysis.R")
rmarkdown::render("dota_2_intelligence_atlas.Rmd")

14 Limitations, Future Research, and Optional Bonus Path

14.1 Limitations

  1. Google Trends is normalized and does not show raw search volume, player count, or market size.
  2. Public match metadata does not fully capture in-game execution, communication, item timing, teamfight quality, or player history.
  3. Hero-pair analysis is associative. Co-pick frequency and pair win rate do not prove causation.
  4. Model performance is constrained by available features.
  5. Network visuals require filtering because full graphs can become overloaded by popularity hubs.

14.2 Future Work

Future versions should add objective-control data, wards placed and dewarded, Roshan and Tormentor timing, KDA, net worth and experience timing, patch version, player/team history, and richer event-level fan attention data.

14.3 Optional Bonus Path: The International Community Pulse

A future extension could collect comments from recent official Dota 2 YouTube videos related to The International. That bonus module would compare comment volume, sentiment, recurring keywords, and optional comment-theme networks. This would add an audience-voice layer to the atlas.

15 Responsible AI Use Statement

Artificial intelligence tools were used as a project companion during the development of this workbook. AI support helped with project planning, code organization, debugging, visual explanation, and the translation of technical results into clearer business and plain-language interpretation.

AI was not used as a substitute for analysis. The project direction, research questions, final visual choices, interpretation of results, and submission decisions were made by the author. All scripts were executed in the project environment, and the final report is based on generated project outputs including model metrics, cluster summaries, hero-pair rankings, network tables, and Google Trends visualizations.

AI assistance was most useful in three areas. First, it helped improve reproducibility by organizing scripts into a clear workflow and adding comments that document the purpose of each step. Second, it helped improve interpretability by creating plain-language and deeper explanations to accompany the visuals. Third, it helped strengthen responsible interpretation by flagging places where the project should avoid overclaiming, including treating weak model lift as strong prediction, confusing hero-pair association with causation, or interpreting Google Trends scores as raw audience size.

The final workbook uses AI-assisted drafting responsibly by keeping the analysis grounded in actual results. For example, the report states that logistic regression only slightly improved on the majority-class baseline, that cluster differences were moderate rather than deterministic, and that Google Trends should be read as normalized relative search interest rather than total market size.

AI-generated suggestions were treated as drafts, scaffolding, and review support. The author remains responsible for the final submitted report, including its code, visuals, explanations, limitations, and recommendations.

16 Session Information

## R version 4.6.1 (2026-06-24)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.4 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
## 
## locale:
##  [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
##  [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
##  [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
## [10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   
## 
## time zone: UTC
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] htmltools_0.5.9   viridisLite_0.4.3 kableExtra_1.4.1  knitr_1.51       
##  [5] scales_1.4.0      plotly_4.12.1     janitor_2.2.1     lubridate_1.9.5  
##  [9] forcats_1.0.1     stringr_1.6.0     dplyr_1.2.1       purrr_1.2.2      
## [13] readr_2.2.0       tidyr_1.3.2       tibble_3.3.1      ggplot2_4.0.3    
## [17] tidyverse_2.0.0  
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.10        generics_0.1.4     xml2_1.6.0         stringi_1.8.7     
##  [5] hms_1.1.4          digest_0.6.39      magrittr_2.0.5     evaluate_1.0.5    
##  [9] grid_4.6.1         timechange_0.4.0   RColorBrewer_1.1-3 fastmap_1.2.0     
## [13] jsonlite_2.0.0     httr_1.4.8         crosstalk_1.2.2    textshaping_1.0.5 
## [17] jquerylib_0.1.4    cli_3.6.6          crayon_1.5.3       rlang_1.3.0       
## [21] bit64_4.8.2        withr_3.0.3        cachem_1.1.0       yaml_2.3.12       
## [25] otel_0.2.0         parallel_4.6.1     tools_4.6.1        tzdb_0.5.0        
## [29] vctrs_0.7.3        R6_2.6.1           lifecycle_1.0.5    snakecase_0.11.1  
## [33] bit_4.6.0          htmlwidgets_1.6.4  vroom_1.7.1        pkgconfig_2.0.3   
## [37] pillar_1.11.1      bslib_0.11.0       gtable_0.3.6       glue_1.8.1        
## [41] data.table_1.18.4  systemfonts_1.3.2  xfun_0.60          tidyselect_1.2.1  
## [45] rstudioapi_0.19.0  farver_2.1.2       rmarkdown_2.31     svglite_2.2.2     
## [49] compiler_4.6.1     S7_0.2.2