Back to projects

Santiago Segovia · Project studies

Technical project reportCompleted

SSBU Self-Performance Analytics

Santiago Segovia

August 2026 - September 2026

Technologies — Python · pandas · scikit-learn · XGBoost · SHAP

View source on GitHub

Abstract

Analyzed personal Super Smash Bros. Ultimate match records using descriptive statistics, matchup heatmaps, K-means, XGBoost, and SHAP to examine character performance and explain patterns associated with recorded outcomes.

Project Overview

This project applies data science to my Super Smash Bros. Ultimate match history to investigate character performance, opponent matchups, and recurring patterns in gameplay. Its purpose is to replace broad impressions about performance with evidence that can be examined at the match, character, and matchup levels. The focus is an individual player's recorded experience, so the resulting findings describe that context rather than a universal ranking of characters.

The analysis combines complementary methods. Descriptive statistics summarize what occurred, clustering explores similarities among performance profiles, and classification examines relationships between recorded features and outcomes. Model interpretation then helps explain which features contribute to the classifier's decisions. Each method addresses a different question and requires its own limits on interpretation.

Data Preparation

The dataset records the player character, opponent character, match result, knockouts, falls, self-destructs, damage given, damage taken, and Global Smash Power. These variables capture different aspects of a match: outcomes summarize success, damage measures offensive and defensive activity, and stock-related statistics describe how that activity translated into eliminations.

Derived features make some comparisons more direct. Damage differential is damage given minus damage taken, damage ratio compares those two quantities proportionally, and knockout differential is knockouts minus falls. These features provide context beyond a binary result, but their definitions matter: a damage ratio needs a defined treatment when damage taken is zero. Global Smash Power also requires contextual interpretation because recorded values can differ across characters and points in the player's history.

Exploratory Analysis

Character-level summaries and matchup heatmaps provide an initial view of how performance varies across the recorded matches. Win rates describe observed outcomes, while damage and knockout summaries help distinguish different ways those outcomes occurred. A strong damage differential, for instance, measures a damage advantage but does not independently establish that the player consistently converted that advantage into wins.

Match counts are essential to interpreting these comparisons. A high observed win rate based on a few games is less informative than a pattern repeated over a larger sample, and sparse matchup coverage can make heatmaps appear more decisive than the evidence supports. These exploratory views identify questions for further analysis; they do not isolate character effects from opponent skill, practice, or the conditions under which matches were played.

K-Means Clustering

K-means groups match records or aggregated matchup summaries according to similarity in their numerical features. The method assigns observations to centroids and seeks to reduce the sum of squared distances within groups. It therefore explores recurring performance profiles without requiring win or loss labels to define the grouping.

Interpreting a cluster requires examining its feature values and the observations assigned to it. A cluster number is an arbitrary identifier, and its meaning must come from the associated damage, knockout, or other statistics. Feature scale matters because larger numerical ranges can dominate distance calculations. The unit of analysis also changes the question: clustering individual matches describes game-level patterns, whereas clustering matchup summaries describes similarities among aggregated opponent relationships.

XGBoost and Model Interpretation

XGBoost classification examines how combinations of recorded features relate to match outcomes. Its boosted decision trees can represent nonlinear relationships and interactions, allowing the model to use several statistics together when forming a prediction. Confusion matrices separate correct and incorrect classifications by outcome, making it possible to inspect error types rather than relying only on a single overall accuracy value.

SHAP explanations attribute contributions to the model's output relative to a reference prediction. They help identify which features move a prediction toward one outcome or the other, but those contributions describe the fitted model rather than a causal mechanism in the game. Feature timing is particularly consequential here: final knockouts, falls, and their differential can directly encode a completed match's result, making classification much easier without establishing an ability to forecast future games.

Limitations and Lessons

The analysis is limited by its focus on one player, uneven matchup coverage, and factors such as opponent skill and improvement over time. Matches are not automatically interchangeable observations: later games may reflect more practice, and different characters may have been played under different conditions. These factors constrain comparisons even when the descriptive statistics are calculated correctly.

The project also distinguishes retrospective explanation from pre-match prediction. Final damage and stock statistics are appropriate for describing a completed game, but are unavailable before play. A forecasting study would require features known at the prediction time and an evaluation that respects that timing, such as testing on later matches using information from earlier ones. The main lesson is that model performance becomes meaningful only after the prediction task, available information, and evaluation conditions have been defined.