9. Логистическая регрессия с нуля: прогноз опоздания

☰ Теория

Для бинарной классификации линейная модель сначала вычисляет z, а затем переводит его в вероятность сигмоидой p = 1 / (1 + e−z). Для сочетания sigmoid + binary cross-entropy градиент по z особенно прост: p − y.

При mini-batch обучении градиент считают не по всей базе, а по небольшой группе объектов. Один полный проход по всем батчам называется эпохой.

Подробно: Если ответ не число, а класс.
Подробно: Если данных очень много.

Мини-проект: предскажите вероятность опоздания

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

Скачайте три файла:

  • train.csv — обучающая выборка;
  • test.csv — заказы, для которых нужно получить вероятности;
  • sample_submission.csv — пример файла для загрузки.

Данные

Для каждого заказа известны признаки:

  • km — расстояние в километрах;
  • traffic_lights — число светофоров;
  • couriers — число доступных курьеров;
  • rush_hour — час пик: 1 или 0.

В train.csv есть ещё столбец late:

late = 1  — доставка опоздала
late = 0  — доставка приехала вовремя

В test.csv столбца late нет.

Модель

Обучите логистическую регрессию:

z = w1 · km
  + w2 · traffic_lights
  + w3 · couriers
  + w4 · rush_hour
  + b

p = sigmoid(z)

Здесь p — предсказанная вероятность опоздания.

В качестве функции потерь используйте binary cross-entropy:

BCE = −среднее(y · ln(p) + (1 − y) · ln(1 − p))

Для одного объекта при сочетании sigmoid + BCE:

ошибка для градиента по z = p − y

Поэтому вклад объекта в градиент веса при признаке x равен:

(p − y) · x

Что нужно сделать

  1. Прочитайте train.csv.
  2. Подготовьте признаки. Для числовых признаков удобно использовать стандартизацию. Все статистики вычисляйте только по train.
  3. Задайте начальные значения весов и свободного члена.
  4. Обучите модель градиентным спуском. Для закрепления темы организуйте обучение по mini-batch:
    • перемешивайте обучающие объекты перед новой эпохой;
    • делите их на небольшие батчи;
    • для каждого батча получайте вероятности p;
    • считайте средний градиент по этому батчу;
    • обновляйте параметры;
    • переходите к следующему батчу.
  5. Размер батча, lr и число эпох выберите самостоятельно. Во время экспериментов следите, уменьшается ли BCE на обучающей выборке.
  6. После обучения прочитайте test.csv. Если вы стандартизировали признаки, примените к test те же параметры преобразования, которые получили по train.
  7. Не дообучайте модель на test. Получите для каждой строки только вероятность p.
  8. Запишите вероятности в submission.csv по образцу sample_submission.csv.

Как именно будет устроена программа — решаете вы. Проверяющая система получает только итоговый файл прогнозов.

Формат ответа

Загрузите CSV-файл ровно с двумя столбцами:

id,probability

Для каждого id из test.csv должна быть указана вероятность опоздания строго между 0 и 1. Порядок строк не важен.

Не превращайте вероятность в готовый класс 0 или 1: проверяется именно качество вероятностей.

Как оценивается результат

Проверяющая система знает скрытый столбец late для тестовой выборки и вычисляет binary cross-entropy:

BCE = −среднее(y · ln(p) + (1 − y) · ln(1 − p))

Чем меньше BCE, тем лучше. Решение засчитывается, если:

BCE ≤ 0.55

Главная идея: train.csv нужен для обучения, а test.csv — для применения уже обученной модели к новым объектам.


Ваш ответ

Для проверки решения задачи необходимо зарегистрироваться или авторизоваться!


Последний прикрепленный файл:

Выберите правильный ответ, либо введите его в поле ввода

Комментарий учителя