Как задать вопрос по машинному обучению в Рунологии и получить модель

Узнай, как правильно формулировать вопрос Рунологии, чтобы она выдала точную модель машинного обучения

В индустрии машинного обучения (ML) -0 % проблем начинаются не с кода и не с данных, а с неправильно поставленного вопроса.
Представьте, что вы пришли к практикующему рунологу и сказали: «Сделай мне руническую модель, чтобы всё было хорошо».
Рунолог вздрогнет, потому что задача не конкретна. Точно так же чувствует себя дата-сайентист, когда ему говорят: «Нужна модель, которая всё предскажет».

Определите «рунический стержень» задачи

В рунологии есть понятие стержневой руны — той, от которой «пляшут» все остальные.
В ML аналог — тип задачи. Уточните одно из трёх:

  • Ansuz (классификация): «объект принадлежит к классу A или B?»
  • Gebo (регрессия): «какое числовое значение мы предскажем?»
  • Hagalaz (кластеризация): «какие скрытые группы есть в данных без меток?»

Пример корректного «рунического» формулировки:

«Требуется руническая модель классификации Ansuz, чтобы по 100-мерному вектору признаков определить, оттокнет ли клиент в ближайшие 30 дней».

Соберите «рунические крохи» — данные

В рунологии данные — это «крохи мирового древа». Собирайте их так:

  1. Формат: CSV, Parquet или простой SQL-демп.
  2. Объём: минимум 1000 наблюдений на класс (иначе руны «не схватят» паттерн).
  3. Разметка: явно обозначьте целевую переменную y, чтобы рунолог не догадывался «по знакам».

Мини-чек-лист загрузки данных

import pandas as pd
df = pd.read_csv('runa_data.csv')
print(df.shape) # (5000, 101)
print(df['Churn'].value_counts) # 0: 3500, 1: 1500

Избегайте «проклятия размерности», сделайте руническую чистку

Как упоминалось в исследовании Хабра, при 100 признаках расстояния между точками вырождаются.
Примените «рунические талисманы»:

  • PCA-руна — линейное снижение размерности:
from sklearn.decomposition import PCA
pca = PCA(n_components=20, random_state=42)
X_pca = pca.fit_transform(X)
  • SelectKBest-руна, отбор признаков:
from sklearn.feature_selection import SelectKBest, f_classif
skb = SelectKBest(f_classif, k=30)
X_new = skb.fit_transform(X, y)

Выберите «руническую модель» и настройте «ритуал» гиперпараметров

Тип задачи Модель-руна Ключевые гиперпараметры
Классификация KNeighborsClassifier n_neighbors, metric, weights
Классификация RandomForestClassifier n_estimators, max_depth, min_samples_leaf
Регрессия XGBRegressor n_estimators, learning_rate, max_depth

Пример «рунического» GridSearch:

from sklearn.model_selection import GridSearchCV
param_grid = {'n_neighbors': [3, 5, 7], 'weights': ['uniform', 'distance']}
gs = GridSearchCV(KNeighborsClassifier, param_grid, cv=5)
gs.fit(X_pca, y)
print(gs.best_params_) # {'n_neighbors': 5, 'weights': 'distance'}

Интерпретируйте результат — «чтение рун» после обучения

Рунолог всегда объясняет, что означают выпавшие символы. В ML аналогично:

  • Feature Importance для деревьев:
importances = model.feature_importances_
for feat, val in zip(X.columns, importances):
 print(f"{feat}: {val:.3f}")
  • SHAP-руна — глубокое объяснение каждого предсказания:
import shap
explainer = shap.TreeExplainer(model)
shap.summary_plot(explainer.shap_values(X_test), X_test)

Задайте вопрос «в рунологическом стиле» — готовый шаблон

Скопируйте и замените переменные:

Я хочу получить руническую модель типа [Ansuz|Gebo|Hagalaz].
Данные: [ссылка на CSV], признаков [N], целевая переменная [имя колонки].
Метрика качества: [accuracy|f1|rmse].
Ограничения: [время обучения ≤ 10 мин, память ≤ 8 Гб].
Желаемая интерпретируемость: [да/нет].

Пример готового запроса к Рунологии-ML:

Я хочу получить руническую модель типа Ansuz.
Данные: customer_churn.csv, признаков 100, целевая переменная Churn.
Метрика качества: f1.
Ограничения: время обучения ≤ 10 мин.
Желаемая интерпретируемость: да.

Конкретная задача + чистые данные + выбор модели + проверка проклятия размерности + интерпретация = готовая модель.

Следуйте этим шагам, и вместо расплывчатого «сделайте что-нибудь» вы получите точную модель, которую можно «перевести на руны» и внедрить в продакшен уже сегодня, 05 июня 2026 года.