Я не могу говорить за всю отрасль, очевидно, но я работаю в отрасли и соревновался на Kaggle, поэтому я поделюсь своим POV.
Во-первых, вы правы, подозревая, что Kaggle не совсем соответствует тому, что люди делают в промышленности. Это игра, которая зависит от мастерства игры, с множеством безумных ограничений. Например, в текущем конкурсе Сантандер :
- Названия объектов были искусственно хешированы, чтобы скрыть их значение.
- «Тренировочный» набор был искусственно ограничен, чтобы иметь меньше строк, чем столбцов, так что выбор характеристик, устойчивость и методика регуляризации были бы необходимы для успеха.
- Так называемый «тестовый» набор имеет заметно отличающееся распределение, чем обучающий набор, и эти два явно не являются случайными выборками из одной популяции.
Если бы кто-то дал мне такой набор данных на работе, я бы сразу предложил им поработать над созданием функций, чтобы мы могли получить более полезные функции. Я бы предложил использовать знания предметной области для определения вероятных условий взаимодействия, пороговых значений, стратегий категориального кодирования переменных и т. Д. Подход к решению проблемы таким образом был бы более продуктивным, чем попытка извлечь смысл из файла исчерпания, созданного инженером базы данных без обучение в ML.
Кроме того, если вы узнаете, скажем, что определенный числовой столбец вовсе не числовой, а скорее почтовый индекс, то вы можете пойти и получить данные из сторонних источников данных, таких как перепись США, для дополнения ваших данных. Или, если у вас есть дата, возможно, вы включите цену закрытия S & P 500 на этот день. Такие внешние стратегии дополнения требуют детального знания конкретного набора данных и значительного знания предметной области, но обычно имеют гораздо большие выгоды, чем чистые алгоритмические улучшения.
Итак, первое большое различие между промышленностью и Kaggle заключается в том, что в отрасли возможности (в смысле исходных данных) являются предметом переговоров.
Второй класс отличий - производительность. Часто модели будут развернуты в производство одним из двух способов: 1) прогнозы модели будут предварительно рассчитаны для каждой строки в таблице очень большой базы данных, или 2) приложение или веб-сайт передадут модели одну строку данных и нужен прогноз, возвращаемый в режиме реального времени. Оба варианта использования требуют хорошей производительности. По этим причинам вы не часто видите модели, которые могут быть медленными для предсказания или использования огромного объема памяти, такие как K-Nearest-Neighbours или Extra Random Forests. Логистическая регрессия или нейронная сеть, напротив, могут получить пакет записей с несколькими умножениями матриц, а умножение матриц может быть высоко оптимизировано с помощью подходящих библиотек.Даже если бы я мог получить, возможно, +0,001 AUC, если бы я использовал еще одну непараметрическую модель, я бы этого не сделал, потому что пропускная способность и задержка прогнозирования слишком сильно упадут.
В этом есть и аспект надежности: использование четырех различных современных сторонних библиотек, скажем, LightGBM , xgboost , catboost и Tensorflow ( конечно же, на графических процессорах ), может дать вам снижение на 0,01 в MSE, которое выигрывает соревнования Kaggle, но это четыре разные библиотеки для установки, развертывания и отладки, если что-то пойдет не так. Здорово, если вы сможете заставить все это работать на своем ноутбуке, но запустить его в контейнере Docker, работающем на AWS, - это совсем другая история. Большинство компаний не хотят возглавлять небольшую команду разработчиков, чтобы заниматься такими вопросами развертывания.
Тем не менее, укладка сама по себе не обязательно огромная сделка. Фактически, объединение нескольких разных моделей, которые одинаково хорошо работают, но имеют очень разные границы принятия решений, является отличным способом получить небольшой удар по AUC и большой удар по надежности. Только не бросайте так много кухонных раковин в свой гетерогенный ансамбль, что у вас начнутся проблемы с развертыванием.