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?
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.
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.
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?
| 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 |
| 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.
| 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 |
| Outcome | Matches | Share |
|---|---|---|
| Dire Win | 4561 | 45.6% |
| Radiant Win | 5439 | 54.4% |
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.
This establishes the majority-class baseline of about 54.4%. Later models should be judged against this benchmark, not against random chance alone.
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 |
This chart compares the baseline, logistic regression, and decision tree. Logistic regression performs best, but only slightly.
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.
This chart shows which selected features were most strongly associated with Radiant winning or losing in the logistic regression model.
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.
This chart shows where the model was right and wrong. Diagonal cells are correct predictions; off-diagonal cells are mistakes.
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.
| 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% |
This chart compares Radiant win rates across match-profile clusters.
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.
Each point is a match. Colors show cluster membership, and nearby points have more similar draft and context profiles.
The PCA view compresses many features into two dimensions. Overlap between clusters means public draft/context metadata does not cleanly separate match types.
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 |
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.
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.
This chart removes Pudge so one popularity hub does not dominate the ranking. It highlights other strong hero-pair associations.
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.
This network shows a cleaner map of recurring hero relationships. Nodes are heroes, and lines connect heroes drafted together.
The full network was too dense and Pudge-heavy. This filtered backbone limits popularity hubs so recurring draft structure is easier to see.
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.
This map shows where Dota 2 over-indexes in U.S. Google search interest.
Google Trends is normalized, so this is not a player-count map. It is best read as relative attention intensity by state.
This map shows countries where Dota 2 has stronger relative Google search interest.
The scores show relative search attention, not raw audience size. Internet access, population, language, and gaming culture can all influence interpretation.
This timeline shows Dota 2 search interest over time with The International event windows highlighted.
Use this as an attention-timing layer. Spikes near TI suggest when Dota content, dashboards, explainers, or recaps may be most timely.
This chart compares average search interest before, during, and after The International.
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.
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.
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.
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.
Google Trends adds an external attention layer that match data alone cannot provide. Because Trends scores are normalized, they should be interpreted as relative search interest rather than raw audience size. The U.S. attention-tier map and The International event pulse are especially useful for identifying where and when Dota-related content or analytics products may find a more receptive audience.
| 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. |
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.
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.
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.
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.
## 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