Разбор

Машинное обучение на Python: первый пример с проверкой качества

Запускаем небольшой классификатор на искусственных данных, сравниваем его с простым ориентиром и разбираем, что этот эксперимент действительно проверяет.

• • 2 мин чтения

Первый пример машинного обучения на Python должен показывать полный цикл: получить данные, отделить проверочную часть, обучить модель и сравнить результат с простым ориентиром. Одного успешного вызова fit для этого мало.

Ниже используются искусственные данные. У них нет бизнес-смысла: это учебная проверка кода, а не доказательство качества классификации настоящих заявок. Пример проверен со scikit-learn 1.6.1; это версия проверенного окружения, а не утверждение о последнем выпуске библиотеки.

Подготовьте отдельное окружение

При установленном Python создайте окружение и установите scikit-learn:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install scikit-learn

Команда активации приведена для macOS и Linux. В Windows путь к сценарию активации отличается. Если установка сообщает о несовместимой версии Python, проверьте требования выбранного выпуска библиотеки, прежде чем менять зависимости.

Сохраните пример в файл

Создайте first_model.py. Генератор сформирует 400 объектов с шестью числовыми признаками. Классы будут представлены неравномерно: это помогает увидеть смысл сравнения с простым классификатором.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.dummy import DummyClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import balanced_accuracy_score

X, y = make_classification(
    n_samples=400,
    n_features=6,
    n_informative=3,
    n_redundant=0,
    weights=[0.8, 0.2],
    random_state=7,
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, stratify=y, random_state=7
)

models = [
    DummyClassifier(strategy="most_frequent"),
    RandomForestClassifier(
        n_estimators=100, max_depth=5, random_state=7
    ),
]

for model in models:
    model.fit(X_train, y_train)
    prediction = model.predict(X_test)
    score = balanced_accuracy_score(y_test, prediction)
    print(type(model).__name__, round(score, 3))

Запустите python first_model.py. Должны появиться две строки с названиями моделей и оценками. Число из учебного запуска не нужно переносить в обещание качества для другого набора данных.

Если результат отличается, сначала сравните версии библиотеки, параметры генератора и разбиения. Зафиксированный random_state помогает повторять выбранные случайные операции, но не заменяет описание окружения.

Что происходит при проверке

Модель видит обучающую часть и получает оценки на отдельной тестовой части. stratify=y сохраняет соотношение классов при таком разбиении. Для временных наблюдений или повторяющихся клиентов этот способ может не подходить: там нужно учитывать порядок и группы.

DummyClassifier в выбранном режиме всегда выдаёт наиболее частый обучающий класс. Случайный лес использует признаки и обучается на их связи с ответом. Сравнение показывает, добавила ли выбранная модель пользу относительно простого правила на этом учебном наборе.

Balanced accuracy усредняет полноту по классам. Для двух классов постоянный прогноз одного класса обычно получает 0,5, если в тесте присутствуют оба класса. Так простое преобладание одной категории не создаёт видимость высокого результата.

Как превратить запуск в эксперимент

Перед заменой искусственных данных своей таблицей определите, что означает строка, какой ответ требуется предсказать и какие сведения доступны в момент прогноза. Исключите признаки, появляющиеся после события. Подробнее об этой границе - в статье о целевой переменной.

Оставьте тестовую часть для итоговой проверки. Для выбора параметров используйте отдельную процедуру внутри обучающих данных. Запишите версии, разбиение и критерий сравнения. Тогда следующий запуск станет проверяемым экспериментом, а не попыткой повторить красивое число из первого примера.

Источники

Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.