Checklist IOAI TST 2025 IOAI Team Selection Test · Task 2
Football Player Clustering
Cluster football players by their FIFA skill ratings so that the clusters match their hidden, possibly multiple, playing positions.
The task
Each player is described by technical, physical and mental skill ratings taken from the FIFA video game (values 0-99), such as crossing, finishing, dribbling, sprint speed, interceptions and goalkeeper ratings. The data contain no position information.
The contestant analyses the features, applies clustering methods (for example k-means, DBSCAN or Gaussian mixtures), chooses the number of clusters and assigns a cluster label to every player. The clusters should correspond to hidden playing positions (for example forward, defender, goalkeeper); a player may have several positions.
Abridged and translated by SOTA from the official Russian materials. The official statement has the exact rules, and it wins wherever this summary differs.
In English
This task was published in Russian. SOTA translated its 2 files into English on 17 September 2026.
- Competition overview Russian original of Competition overview
- Data description Russian original of Data description
Read the competition overview in English
Football Player Clustering
English translation by SOTA – AI Community of the Russian original. Licensed CC BY-NC-SA 4.0, like the original. Organisers who would like this translation removed can email [email protected].
Contest 2 (27 June 2025) of the Kazakhstan IOAI Team Selection Test (Отборочные на IOAI), 2025; the contest hub marks this contest "Unrated". This is the Overview tab of the Kaggle competition "TST day2 Upsolving", the host's public upsolving copy of the contest, open from 27 June to 15 July 2025. Its subtitle reads: "This is a copy of the original contest. In the original, the metric worked incorrectly. The error has been fixed here." Original: kaggle.com/competitions/tst-day-2-upsolving. The Data tab is translated in a separate file.
Overview
In this task you are to cluster football players on the basis of their playing attributes, taken from the FIFA game. The dataset contains skills such as dribbling, passing, stamina, shot power, shooting accuracy and goalkeeping skills.
The goal is to divide the players into groups (clusters) that correspond to their hidden playing positions (for example, forward, defender, goalkeeper, etc.).
Description
📌 What you need to do
- Analyse the features (34 playing skills in total).
- Apply clustering methods (for example, KMeans, DBSCAN, GMM, etc.).
- Determine the optimal number of clusters.
- Assign a cluster label to each player.
- Submit a
submission.csvfile with the columns:id,positions.
Evaluation
📊 Evaluation metric: B-Cubed F1 for multi-position clustering
🧠 What the metric measures
Each player can have several positions (for example, {CM, CAM}). The purpose of the metric is to check how well the participant has grouped players with overlapping positions.
For each player :
- Precision(i) is the fraction of players in the same predicted cluster who have at least one position in common with player :
- Recall(i) is the fraction of players who have at least one position in common with player and are in the same cluster:
3. Averaging over all players:
4. Final result:
B-Cubed F1 = 2 * Precision_avg * Recall_avg / (Precision_avg + Recall_avg)
📌 Example
A cluster contains 3 players:
-
Player 1:
{ST} -
Player 2:
{ST, CF} -
Player 3:
{CB}(all of them are in the same cluster) -
Precision(1): There are 2 other players in the cluster, and only 1 of them (player 2) overlaps in position → precision = 1 / 2 = 0.5
-
Recall(1): Player 2 is the only player whose positions overlap, and he is in the same cluster → recall = 1 / 1 = 1.0
-
The values for the other players are computed in the same way; they are then averaged and the final F1 is computed.
✅ Advantages
- Supports multi-class (multi-position) labelling
- Takes into account both the precision of the clusters and their recall
- Does not depend on cluster size: each player makes an equal contribution
- The metric value always lies within [0, 1]
Translated by SOTA. The Russian original is the official version and wins wherever the two differ. This translates the Overview and Data tabs of the host's public upsolving copy on Kaggle; the Rules tab (code of conduct, allowed websites and libraries) is not included. The Description speaks of 34 playing skills, while the Data tab's table lists 32 skill columns plus id. In the averaging step of the metric the original wrote the Russian words for "mean of" inside the formula; the translation puts them in English. The competition data on Kaggle are licensed CC BY-NC-SA 4.0. If you organise this olympiad and would like the translation removed, email [email protected] and we will take it down.
At a glance
- You get
train.csvwith an id column and the players' skill ratings (the task page speaks of 34 skills).- You submit
submission.csvwith columns id and positions (the assigned cluster label).- Scoring
- B-Cubed F1 for multi-position clustering: for player i, Precision_i = share of the other players in i's predicted cluster that share at least one true position with i; Recall_i = share of the players sharing a position with i that are in i's cluster; precision and recall are averaged over players and F1 = 2PR/(P+R). Contest scoring (hub page): each task is worth at most 100 points; Norm_Score = (Submission_Score - Min_Score) / (Max_Score - Min_Score) x 100, where Min_Score is the lower of 0.9 x baseline score and the lowest participant score, and Max_Score is the higher of 0.9 x the Scientific Committee solution score and the best participant score.
- Rules
- Read-only access to stackoverflow.com, scikit-learn.org, pytorch.org, huggingface.co, numpy.org, github.com, python.org, pypi.org, a search engine restricted to these sites and a translation site.
- GPT-4o (or a newer version announced before the contest) is allowed through the platform integration; other LLMs, chats, Copilot tools and APIs are forbidden unless the task says otherwise.
- Allowed libraries include torch, scikit-learn, xgboost, catboost, lightgbm, transformers, spacy, nltk, gensim, fasttext, pandas, numpy, scipy, opencv-python, Pillow, torchvision, scikit-image, matplotlib, seaborn, plotly and common utilities; TensorFlow and Keras are not available.
- Pre-trained models and external data are forbidden unless the task allows them; no extra training time after the contest ends; contestants may be asked to upload code, models and/or predictions.
- Format
- Kazakhstan IOAI Team Selection Test 2025, contest 2 of 4 (27 June 2025), run as a private Kaggle competition; the public Kaggle copy is an upsolving clone of it. The hub marks this contest 'Unrated'; the copy's subtitle says the metric worked incorrectly in the original and is fixed in the copy.