Комментарии 49
Где вы находите эти конкурсы?
Поддерживаю вопрос обеими руками.
Есть где-нибудь список с сайтами, на которых проводятся соревнования по машинному обучению? Или некий ресурс, который аггрегирует список всех текущих и будущих соревнований?
Я бы в этом соревновании поучаствовал бы, если бы, знал, что оно существует.
Есть где-нибудь список с сайтами, на которых проводятся соревнования по машинному обучению? Или некий ресурс, который аггрегирует список всех текущих и будущих соревнований?
Я бы в этом соревновании поучаствовал бы, если бы, знал, что оно существует.
Где русскоязычные конкурсы искать не знаю, но некоторые анонсы мероприятий попадаются на блоге Александра Дьяконова.
В частности, он писал про качество организации этого конкурса: alexanderdyakonov.wordpress.com/2015/09/11/moscow-data-fest
Ну и площадки с мировыми конкурсами, если ещё не знайте о них:
www.kaggle.com
www.crowdanalytix.com
www.drivendata.org
algomost.com/ru (проект Сколково)
В частности, он писал про качество организации этого конкурса: alexanderdyakonov.wordpress.com/2015/09/11/moscow-data-fest
Ну и площадки с мировыми конкурсами, если ещё не знайте о них:
www.kaggle.com
www.crowdanalytix.com
www.drivendata.org
algomost.com/ru (проект Сколково)
Мне друг написал про него
С такими данными, когда большинство полей в виде хешей не-пойми-чего — это какая-то угадайка, игра типа «Код Да Винчи» в самом плохом смысле.
Хеши нельзя читать нормальными данными.
Нет данных — нет модели.
Нет модели — нет ничего, копать бессмысленно.
Хеши нельзя читать нормальными данными.
Нет данных — нет модели.
Нет модели — нет ничего, копать бессмысленно.
habrahabr.ru/article/266543/
Конкурс от билайна, где кроме чисел так же есть три колонки хэшей от непонятно чего. Возможно тарифных планов или названия городов. Категориальные переменные по 5000 значений в каждой. Ничего, 100 человек за три дня приняли участие. Предсказания идут на уровне 76% в среднем.
Конкурс от билайна, где кроме чисел так же есть три колонки хэшей от непонятно чего. Возможно тарифных планов или названия городов. Категориальные переменные по 5000 значений в каждой. Ничего, 100 человек за три дня приняли участие. Предсказания идут на уровне 76% в среднем.
Просто ещё никто не начинал всерьёз работать, кроме одно человека, у которого 92%. Чтобы получить 74-75% там достаточно всего лишь несколько столбцов.
Да, я видел этот конкурс…
Поясню свою мысль:
Допустим устраивается конкурс о игре в орлянку.
Собралось 100 человек, каждый участник подбрасывает монетку 100 раз, и считается рейтинг участника как процент выпадения орла. Что будет в результате? В топе будут игроки с результатами и 60 и 70 и 80%.
Но значит ли это, что они умеют управлять монеткой?
Пример утрирован, но суть понятна.
Я видел довольно много примеров, как ищутся и успешно находится взаимосвязи между тёплым и мягким или между бузиной в огороде и характером дядьки в Киеве. С доверительными интервалами, высоким попаданием и т.д. Понятно, чего это стоит в реальной жизни. Основа — это модель, а только потом идут всякие нейросети, машин-лёнин и т.д. А в основе модели — понимание процесса. А с настолько обфусцированными данными, как в этих конкурсах, ничего хорошего не может получиться в принципе.
Поясню свою мысль:
Допустим устраивается конкурс о игре в орлянку.
Собралось 100 человек, каждый участник подбрасывает монетку 100 раз, и считается рейтинг участника как процент выпадения орла. Что будет в результате? В топе будут игроки с результатами и 60 и 70 и 80%.
Но значит ли это, что они умеют управлять монеткой?
Пример утрирован, но суть понятна.
Я видел довольно много примеров, как ищутся и успешно находится взаимосвязи между тёплым и мягким или между бузиной в огороде и характером дядьки в Киеве. С доверительными интервалами, высоким попаданием и т.д. Понятно, чего это стоит в реальной жизни. Основа — это модель, а только потом идут всякие нейросети, машин-лёнин и т.д. А в основе модели — понимание процесса. А с настолько обфусцированными данными, как в этих конкурсах, ничего хорошего не может получиться в принципе.
Собралось 100 человек, каждый участник подбрасывает монетку 100 раз, и считается рейтинг участника как процент выпадения орла. Что будет в результате? В топе будут игроки с результатами и 60 и 70 и 80%.
Но значит ли это, что они умеют управлять монеткой?
Именно потому в конкурсах всегда есть открытая часть (та, по которой отображается текущий топ) и закрытая (та, по которой считается финальный результат)
Если человек показывает 70% на одной части и столько же на другой — да, он вероятно умеет управлять монеткой.
А можете пояснить механику на примере? что значит, закрытая часть?
имеется в виду выборки in samle и out sample. причём неявно предполагается, что обе выборки как бы принадлежат одной генеральной совокупности, если можно так сказать. В случае с монеткой это верно, в реальной жизни — далеко не всегда. Например та же игра в орлянку, но с профи-игроком, который этим зарабатывает на жизнь )))
Участникам выдаются 2 датасета: тренировочный (с ответам) и тестовый (без ответов). Требуется сгенерировать предсказание для тестового множества и послать его в систему. На стороне сервера предсказания разделяются фиксированным образом (но неизвестным участникам) на открытую (public) и закрытую (private) часть. Как правило, в пропорции 30 \ 70.
Участники могут отправлять свои решения — и будут видеть качество только на открытой части. Таблица участников ранжируется по этому результату. Однако финальный результат будет вычисляться по закрытой части датасета.
То есть можно сильно переобучиться на public часть — и быть высоко в таблице. Но это не имеет смысла, потому что по итогам private слетишь вниз. Такое бывает часто =)
Участники могут отправлять свои решения — и будут видеть качество только на открытой части. Таблица участников ранжируется по этому результату. Однако финальный результат будет вычисляться по закрытой части датасета.
То есть можно сильно переобучиться на public часть — и быть высоко в таблице. Но это не имеет смысла, потому что по итогам private слетишь вниз. Такое бывает часто =)
Одно время учавствовал в конкурсах на kaggle… и практика показывает, что когда организаторы конкурса не дают информации о природе признаков, то в ТОП-е сидят алгоритмы, которые представляют собой стек средне обученых классификаторов. Т.е. народ обучает сначала традиционные алгоритмы типа RandomForest, SVM, adaBoost etc. получают на них результаты ~60-80% точности на тестовой выборке, а потом просто считают результат как голосование(иногда делают хитрее и строят по этим выходам регрессию) от всех таких «средних» моделей и получают результаты >90% с которыми и попадают в топ. Т.е. по сути оверфитятся на данные, при этом какой либо значимой практической пользы от таких моделей нет.
з.ы. и это не говоря о том, что организаторы могут дать нерепрезентативные данные, на которых хорошая классификация будет получаться по небольшому подмножеству признаков или корреляции не связаных между собой(в реальном мире) признаков.
з.ы. и это не говоря о том, что организаторы могут дать нерепрезентативные данные, на которых хорошая классификация будет получаться по небольшому подмножеству признаков или корреляции не связаных между собой(в реальном мире) признаков.
да, оверфит — самая лучшая формулировка
Т.е. народ обучает сначала традиционные алгоритмы типа RandomForest, SVM, adaBoost etc. получают на них результаты ~60-80% точности на тестовой выборке, а потом просто считают результат как голосование(иногда делают хитрее и строят по этим выходам регрессию) от всех таких «средних» моделей и получают результаты >90% с которыми и попадают в топ. Т.е. по сути оверфитятся на данные, при этом какой либо значимой практической пользы от таких моделей нет.
А что вы в данном случае называете оверфитом? В чем проблема, если народ получает те же >90% на тестовом множестве?
Вы не могли бы раскрыть свой опыт участия в соревнованиях на кагле? Ну или указать ваш nickname?
Это прозвучит немного грубо, но ваш комментарий сильно напоминает мнение, моих знакомых, которые с каглом знакомы только по наслышке и их мнение сводится к :«Пастернака не читал, но осуждаю.» Но вы, вроде как участвовали, поэтому хотелось бы узнать в каких именно соревнованиях и с каким успехом.
Это прозвучит немного грубо, но ваш комментарий сильно напоминает мнение, моих знакомых, которые с каглом знакомы только по наслышке и их мнение сводится к :«Пастернака не читал, но осуждаю.» Но вы, вроде как участвовали, поэтому хотелось бы узнать в каких именно соревнованиях и с каким успехом.
- Оверфит — это когда ошибка на тестовой выборке значительно больше, чем на train set. Хитрые комбинации различных алгоритмов — это не overfitting, это ensembling. И если overfitting — это в принципе плохо, то ensembiling — по ситауации. При составлении ансамбля теряется инетрпретируемость и масштабируемость, но часто повышается точность предсказания. И использование ансамблей оправдано, если нужна именно зашкаливающая точность. Да, в большинстве практических задач интерпретируемость и масшабируемость важнее, чем дополнительная пара процентов. Во многих задачах точность 82% или 84% — вообще неотличима. Но, сореванования, они про то, сколько можно выжать из предложенных данных. Своего рода benchmark. Можете воспринимать соревнования, как научную задачу:«Какова максимальная точность модели, на этих данных?» Существует куча статей на тему MNIST dataset, и прочих общеизвестных данных. Тут ровно то же. Поэтому как правило каждое соревнование на кагле приводит к статьям в резензируемых научных журналах и вуступлениям на конференциях.
- Ещё вот такой нюанс. Недостаточно взять и натравить сложный алгоритм на исходные данные(исключение работа с изображениями, используя нйронные сети и то не всегда). Точность предсказания основывается на двух ступенях: обработка дынных и собственно сама модель. Те, кто в топе, в первую очередь пытаются работать с данными, и это даёт наибольшый выход, а уже потом, когда фичи новые не придумать, то начинаются жёсткие численные методы с ансамблями и прочей экзотикой. Но, ка кправило, в топ 10%, можно выехать на простом алгоритме и правильно обработанных данных. Иногда первая ступень, то есть очистка данных, создание признаков и т.д. Не работает. Вот просто не работает. Пример: Соревнование otto. Все признаки анонимезированы, пропущенных значений нет. Все признаки важны. Комбинирование признаков тоже ничего не даёт. Да, на практике такое, наверно, не встречается. Ну и что? Соревнование было про алгоритмы и как с ними правильно работать. Так что с точки зрения практики это было больше про знания, нежели про применения этого алгоритма в компании, которая предоставила данные. Это Кагл. есть данные, есть метрика, есть вопрос — крутитесь как хотите. Титулы, звания, возраст, опыт работы — в пользу бедных. Важен результат. Распространёно причетание на форуме на тему, данные плохие, поэтому и моя модель плохая, и вообще смысла работать над этими данными нет. Так вот не надо причитать. Надо стороить модель, которая будет наиболее точной. Тут все в одной лодке. Для всех данные зашифрованы. Но это не мешает заниматься построением модели.
- На тему "… а потом просто считают результат как...". Тут меня смущает слово «просто». Построение ансамблей — это дело тёмное, наука, сама в себе. Я бы побоялся такое слово употреблять.
Хеши несут информацию о том, что данный признак является категориальным, проверка категорий на равенство сохраняется.
Почему их нельзя считать нормальными данными?
Почему их нельзя считать нормальными данными?
Потому что неизвестно, что это за характеристики, соответственно, могут они в принципе влиять на конечный результат или нет.
Формально, я не не спорю, можно обойтись и таким полностью обфусцированным набором. Но тогда это превратится в соревнование по фитингу y=f(x1, x1...xn), не более, без претензий на моделирование чего-то.
Формально, я не не спорю, можно обойтись и таким полностью обфусцированным набором. Но тогда это превратится в соревнование по фитингу y=f(x1, x1...xn), не более, без претензий на моделирование чего-то.
А нужно ли моделирование в данном случае?
Задача ведь ставится именно как аппроксимация y=f(x1, x1...xn), никто не требует интерпретируемости отображения f.
Задача ведь ставится именно как аппроксимация y=f(x1, x1...xn), никто не требует интерпретируемости отображения f.
Конечно. Представьте себе, что в каком то поле заложен почтовый индекс или адресный классификатор (я не из РФ, поэтому не обладаю данными по таким справочникам). При анализе таких данных нужно разворачивать цепочку населенный пункт->район->область->округ. И даже если эти данные есть в хешах, их нужно нащупать.
Почему «конечно»?
Может мы расходимся в понимании слова «моделирование»? Я его сейчас использую как «написание решающего правила в символьном виде и его обоснование здравым смыслом \ экспертными знаниями».
Вы говорите про обогащение данных внешними источниками, а не про необходимость получения интрепретируемой модели.
Безусловно, хеширование затрудняет процесс построения решения, но не лишает задачу смысла.
Да, мы не знаем, что каждый признак означает — но все численные характеристики сохранились.
Достаточно ли этого, чтобы производить отбор и генерировать новые признаки на основании уже имеющихся? Мне кажется, да.
Может мы расходимся в понимании слова «моделирование»? Я его сейчас использую как «написание решающего правила в символьном виде и его обоснование здравым смыслом \ экспертными знаниями».
Вы говорите про обогащение данных внешними источниками, а не про необходимость получения интрепретируемой модели.
Безусловно, хеширование затрудняет процесс построения решения, но не лишает задачу смысла.
Да, мы не знаем, что каждый признак означает — но все численные характеристики сохранились.
Достаточно ли этого, чтобы производить отбор и генерировать новые признаки на основании уже имеющихся? Мне кажется, да.
Да можно конечно и считать. Проблема только в том, что ряд популярных пакетов преобразуют категориальные переменные в колонки обычных переменных со значения 0-1. И если у вас есть колонка с неизвестными хэшами, то если вы её привычно превратите в 8000 бинарных колонок на этом многие алгоритмы и сдуются.
А поскольку информацией о природе этих хэшей вы не обладаете, то хотя бы кластеризовать их можете только через совсем лобовые методы машинного обучения. Что грустно.
Если знаете способ работать с такими данными более весело — подскажите.
А поскольку информацией о природе этих хэшей вы не обладаете, то хотя бы кластеризовать их можете только через совсем лобовые методы машинного обучения. Что грустно.
Если знаете способ работать с такими данными более весело — подскажите.
Можно каждое значение хеша закодировать числом. Например, частотой встречаемости. Или сглаженной вероятностью целевой переменной (в случает бинарной классификации). И после кодировки — использовать любимый алгоритм.
А можно не кодировать, а оставить в виде one-hot и использовать линейную модель, для нее 8000 бинарных колонок — совсем не проблема.
Кроме того, можно применить разные матричные разложения к получившейся бинарной матрице — и их результаты использовать как признаки для ваше любимого алгоритма.
Уверены, что между категориальными переменными есть взаимодействие? Можно попробовать построить квадратичную линейную модель.
Пространство очень большое, а данных не хватает? Можно факторизовать матрицу квадратичных весов (как это сделано в факторизационных машинах)
Хочется взаимодействий более высоко порядка? Адаптивные полиномы или полные полиномы + хэширование.
Эти методы (кроме кодировки и описанного сценария использования матричных разложений) реализованы как минимум в vowpal wabbit.
А можно не кодировать, а оставить в виде one-hot и использовать линейную модель, для нее 8000 бинарных колонок — совсем не проблема.
Кроме того, можно применить разные матричные разложения к получившейся бинарной матрице — и их результаты использовать как признаки для ваше любимого алгоритма.
Уверены, что между категориальными переменными есть взаимодействие? Можно попробовать построить квадратичную линейную модель.
Пространство очень большое, а данных не хватает? Можно факторизовать матрицу квадратичных весов (как это сделано в факторизационных машинах)
Хочется взаимодействий более высоко порядка? Адаптивные полиномы или полные полиномы + хэширование.
Эти методы (кроме кодировки и описанного сценария использования матричных разложений) реализованы как минимум в vowpal wabbit.
все кто ушли в январе, ушли и в феврале.
Вы сломали мне мозг, что значит эта фраза?
НЛО прилетело и опубликовало эту надпись здесь
Насколько я понимаю, не важно что эти хэши означают для аналитика человека. Важно что они означают с точки зрения обучаемой нейронной сети, и сможет ли она предсказать уход клиентов после обучения тестовым набором данных.
Именно, что не так.
Пусть есть набор данных (x,y) 100 точек.
Требуется найти взаимосвязь y=f(x), при этом в задаче не говорится о характере взаимосвязи.
Задачу решают 2 участника.
Первый знает, что фундаментально взаимосвязь линейная и строит модель y=ax+b
При этом из-за большой ошибки в исходных данных y=ax+b + N(m,s) точность модели получается очень плохой, скажем 20% ошибки.
Второй участник не знает о фундаментальной взаимосвязи и строит полином 100-й степени y=a100* x^100+ a99* x^99 +…
Модель получается изумительной, ошибка 0,00001%
Вопрос — кто построил лучшую регрессию?
Пусть есть набор данных (x,y) 100 точек.
Требуется найти взаимосвязь y=f(x), при этом в задаче не говорится о характере взаимосвязи.
Задачу решают 2 участника.
Первый знает, что фундаментально взаимосвязь линейная и строит модель y=ax+b
При этом из-за большой ошибки в исходных данных y=ax+b + N(m,s) точность модели получается очень плохой, скажем 20% ошибки.
Второй участник не знает о фундаментальной взаимосвязи и строит полином 100-й степени y=a100* x^100+ a99* x^99 +…
Модель получается изумительной, ошибка 0,00001%
Вопрос — кто построил лучшую регрессию?
А как при этом вы измеряете качество? Что такое «ошибка 0,00001%»?
Если это out-sample — то второй лучше.
Если это out-sample — то второй лучше.
я понимаю вашу мысль, но я бы не делал такую большую ставку на критей аут оф сэмпл, вы, видимо ещё не сталкивались с ситуациями, когда out of sample совсем не помогает
А можете привести пример, когда критерий out-of-sample совсем не помогает? Я действительно с таким не сталкивался — кроме случая, когда выборка мала.
когда есть нестационарность и процесс периодически «ломается» в числовом виде, но при этом базовые «уравнения» остаются теми-же. Из конкретики сейчас вспоминается только корреляция цен, например нефти Brent и WTI, больше с ходу примеров не вспомню… А, вот ещё — продажи товаров на динамичном рынке, тоже out of sample плохо работает
В блоге Дьяконова, в комментариях, говорится об ошибке в постановке задачи, ID нужно извлекать не так, как описано в условиях. Вы прошли этот этап? Получили правильную схему?
Сотенку зажали и работать к себе не позвали, в чём тогда был смысл мероприятия? Очевидно же, что с такой шириной освещения конкурса автор там был единственным участником с нормальными результатами.
А в какую СУБД загружают такие огромные файлы, чтобы потом быстро с ними работать, рисовать такие графики и т.д.? Одна только загрузка ведь займет полчаса-час, а нужно еще обрабатывать.
пара-тройка нод с cassandra, например
и какой-нибудь spark ml сверху через коннектор
и какой-нибудь spark ml сверху через коннектор
Да, было б интересно узнать, как вы с этим 35Г файлом работали
БД не использовалась. Данные хранились в текстовом файле на жёстком диске. Когда нужно было что-то по нему он читался строчка за строчкой и парсился. Обработка занимался около пяти-десяти минут.
А почему у вас ROC-Curve только одну точку перегиба имеет? Вы отсекали по порогу решения только один раз?
Сбербанк почему-то требовал бинарных ответов. Если sklearn передать вектор из 0 и 1, а не вероятности оттока, получаются такие кривые. Почему именно такие я не вникал
А может в этом и была ваша недоработка. Если передавать в функцию расчета ROC-Curve результаты работы того же рандом фореста в виде уровней зависимой переменной (у вас она бинарная) — 0 или 1, то нельзя построить нормальную кривую, так как отсекать нечего. Тут и следовало бы вникнуть в то, что вы используете. Как вы будете отсекать 0 от 1? Только один раз и получится.
Отсечение происходит по-правильному многократно по, например, вероятности принадлежности к уровню переменной. А уже когда есть нормальная кривая, на ней можно поискать точку оптимального порога отсечения (например, 0.8) и потом результаты от рандом фореста в виде вероятностей классифицировать по этому порогу, и уже полученный результат в виде бинарной классификации отправлять заказчику.
Отсечение происходит по-правильному многократно по, например, вероятности принадлежности к уровню переменной. А уже когда есть нормальная кривая, на ней можно поискать точку оптимального порога отсечения (например, 0.8) и потом результаты от рандом фореста в виде вероятностей классифицировать по этому порогу, и уже полученный результат в виде бинарной классификации отправлять заказчику.
Вроде бы alexkuku занял Место №2 в конкурсе rusbase.com/news/data-win, выше только www.kaggle.com/stasg7
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как я участвовал в конкурсе Сбербанка про предсказание оттока клиентов