На первых же занятиях по анализу данных, один из приёмов, которым я учу студентов — построение диаграммы рассеивания (скатерплот) по признакам id (номер в таблице) и время (номер, когда сделана запись). Недавно я сам попался на том, что вовремя не применил этот приём…
Если в признаковой таблице строки записаны в хронологическом порядке, то вы увидите график монотонной функции (см. рис.1 ). В идеальном мире это линейная функция (таблица пополняется равномерно). В реальном мире он изогнут, и по изгибам видны периоды интенсивного пополнения. На рис. 1 вообще виден разрыв, и при детальном рассмотрении он интересен. Скажем, на рис.2 показан скатерплот времени и другого признака. Видно, что после разрыва изменились статистические свойства данных. И, кстати, в задаче, из которой взяты все эти графики, если тестироваться на CV, то качество будет 0.65 AUC ROC, а если на последнем участке обучающей выборки (как и положено в задачах со временем), то только 0.55! А объяснение простое: данные до «разрыва» не позволяют прогнозировать данные после (они просто разные).
Кстати, внимательный читатель может заметить, что не в разрыве дело… можете в комментария предположить, с какого момента изменились «свойства данных».
А теперь поучительная история… что я не заметил. Дело было в одни выходные, проходил онлайн-хакатон (2 дня на задачу) с очень симпатичными данными. Я участвовал, больше с целью сделать неплохой кейс для студентов, т.е. за эти 2 дня я ещё слайды делал и строил все эти графики, что вы видите в посте. За несколько часов до конца хакатона качество одного из участников перевалило за 0.8 AUC ROC, причём у остальных было 0.65 (в конце соревнования 0.8 было уже у трёх). Понятно, что в данных какая-то утечка. Искать уже не было времени (а я перепробовал стандартные варианты), в итоге качество-то я повысил, но ценой переобучения… а то, что нашли лидеры банально.
Итак, взглянем ещё раз на первоначальную диаграмму рассеивания. Теперь я увеличу её фрагмент…
Как говорится, комментарии излишни. В таблице данные упорядочены по дням, а в каждый конкретный день — по целевому признаку! Самая простая и глупая утечка!!! Почему она была не заметна для большинства? Потому что в первые дни это не так. И листая таблицу ничего не видишь… а вот пролистав дальше уже видишь чередование групп 0 и 1 в бинарном целевом признаке.
Думаю, что раньше я бы легко это заметил (ведь замечал же в нескольких соревнованиях и даже описывал в своей н-п лекции). Но работа с реальными данными (а не данными соревнований) портят интуицию. В реальности ты знаешь, как получены данные, и если ты их сам не упорядочишь по значению целевого признака, никто это не сделает. А в разных хакатонах данные кто-то готовит. К сожалению, в 70% случаях способ подготовки такой, что решение зашивается в сами данные и участники решают не задачу, а ищут утечки.
Мораль: смотрите на графики id-время, только внимательно и в хорошем масштабе;)
А что за хакатон был, если не секрет?
А вот здесь часто проводятся «короткие» соревнования: http://datahack.analyticsvidhya.com/contest/all