Discord

Checklist VsOSh AI 2026 Regional Stage, Tour 2 (data analysis and machine learning) · B task

Clustering

Russian title: Кластеризация

Determine the number of clusters in an unlabelled table and cluster its objects.

  • Tabular
  • Unsupervised clustering
  • Russian original · English translation

The task

On the way to the regional stage, Misha found a flash drive labelled "methodological commission" containing a table data.csv with no target column. He concluded that it is a clustering problem, but the number of clusters is not given anywhere.

The contestant must determine the number of clusters and assign every object to a cluster.

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 3 files into English on 16 September 2026. Only the words changed in the notebooks: markdown, code comments, messages and printed output. The code, file names and paths are the original's, so a translated notebook runs with the original data.

Read the task statement in English 521 words

Clustering

English translation by SOTA – AI Community of the Russian original. Organisers who would like this translation removed can email [email protected].

All-Russian School Olympiad in Informatics 2025–2026, Regional Stage, Grades 9–11
“Artificial Intelligence” profile, Tour 2, 19 January 2026
Task B

Points for the task: 100
Answer submission format: uploading an answer file in .csv format
Number of attempts: 20
Submission that counts: the last one

Statement

On his way to the regional stage of the All-Russian School Olympiad in AI, Misha found a USB flash drive on a key ring with the words “methodological commission” written on it. The flash drive turned out to contain a table file named data.csv. Since Misha found no target variable in the csv file, he rightly concluded that this must be a clustering task. However, Misha could not find any information about the number of clusters anywhere. Help Misha work out the number of clusters and cluster the data correctly.

Input format

The following files are attached to the task:

  • data.csv - contains the object–feature matrix (each row of the table is an object, each column is a feature). The column id is the object identifier. The other columns are features.
  • baseline.ipynb - a notebook with a baseline solution to the task.
  • submission.csv - an example of the solution that you need to submit to the testing system.

Output format

You need to submit, as your submission, the file submission.csv containing two columns:

  • id - the identifier of the object from data.csv.
  • cluster - the cluster you predicted for the object (a positive integer).

Scoring

You can get up to 100 points for this task.

The data are split into a public and a private part. When you submit submission.csv, you are shown the result on the public part. After the contest ends, your result will be recalculated on the private part.

After the end of the stage, your metric will be converted to a 100-point scale according to the following rule:

  • the result of the baseline solution (ARI=0.0) is worth 0 points;
  • the result of the author's solution (ARI=0.9814) is worth 100 points;
  • results between these two points are distributed linearly.

Answer evaluation metric

This task uses the metric ARI (Adjusted Rand Index). The more pairs of objects Misha assigns to clusters correctly (for example, if the two objects are in different clusters and Misha also puts them in different clusters, OR the two objects are in the same cluster and Misha also puts them in the same cluster), the higher this metric. ARIARI takes the value 0 for a random partition into clusters and the value 1 for a perfectly correct partition, and it can take negative values for a poor partition that is worse than random.

Example of computing the ARI metric in Python:

from sklearn.metrics import adjusted_rand_score

labels_true = [0, 0, 1, 1, 2, 2]
labels_pred = [1, 1, 0, 0, 2, 2]

ari = adjusted_rand_score(labels_true, labels_pred)
print("ARI =", ari)

Translated by SOTA. The Russian original is the official version and wins wherever the two differ. The statement PDF does not link the data; the official editorial archive (https://yastatic.net/s3/contest/roi/2026/ml/day2/editorial.zip) contains it as data_B.csv, whose identifier column is named ID rather than id. 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
data.csv (id column and feature columns), baseline.ipynb, submission.csv (example).
You submit
submission.csv with columns id and cluster (positive integer).
Scoring
Adjusted Rand index. The baseline result (ARI = 0.0) gives 0 points and the author's solution (ARI = 0.9814) gives 100, linear in between. Scored on a private part of the test data after the contest (public part shown live); 20 attempts, the last one counts.
Format
Regional stage, Tour 2 (data analysis and machine learning), 19 January 2026; grades 9–11; individual; 300-minute tour (Moscow procedure); submissions in Yandex Contest.

Details

Year
2026, Regional venues across Russia (in person)
Round
Regional Stage, Tour 2 (data analysis and machine learning) · B task
Language
Russian; English translation by SOTA
License
Not stated by the source