Мини-проект: предскажите вероятность опоздания
В этой задаче проверяется не текст вашей программы, а качество прогнозов обученной модели. Формат похож на соревнования по машинному обучению: есть обучающая выборка с правильными ответами и тестовая выборка, ответы для которой скрыты.
Скачайте три файла:
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
Что нужно сделать
- Прочитайте
train.csv.
- Подготовьте признаки. Для числовых признаков удобно использовать стандартизацию. Все статистики вычисляйте только по train.
- Задайте начальные значения весов и свободного члена.
- Обучите модель градиентным спуском. Для закрепления темы организуйте обучение по mini-batch:
- перемешивайте обучающие объекты перед новой эпохой;
- делите их на небольшие батчи;
- для каждого батча получайте вероятности
p;
- считайте средний градиент по этому батчу;
- обновляйте параметры;
- переходите к следующему батчу.
- Размер батча,
lr и число эпох выберите самостоятельно. Во время экспериментов следите, уменьшается ли BCE на обучающей выборке.
- После обучения прочитайте
test.csv. Если вы стандартизировали признаки, примените к test те же параметры преобразования, которые получили по train.
- Не дообучайте модель на test. Получите для каждой строки только вероятность
p.
- Запишите вероятности в
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 — для применения уже обученной модели к новым объектам.