Я не можу говорити за всю галузь, очевидно, але я працюю в промисловості і змагався на Kaggle, тому я поділюсь моєю POV.
По-перше, ви праві підозрювати, що Kaggle не відповідає точно тому, що люди роблять у галузі. Це гра, за умови ігрового управління, з безліччю шалених обмежень. Наприклад, у змаганнях Сантандера :
- Імена функцій штучно хешували, щоб приховати своє значення
- "Навчальний" набір штучно обмежувався меншою кількістю рядків, ніж стовпці, зокрема, щоб техніка вибору, стійкості та регуляризації була б незамінною для успіху.
- Так званий "тестовий" набір має помітно інший розподіл, ніж навчальний набір, і два, очевидно, не випадкові вибірки з однієї сукупності.
Якби хтось наділив мені такий набір даних на роботі, я б негайно запропонував би попрацювати з ними над функціональною інженерією, щоб ми могли отримати корисніші функції. Я б запропонував використати знання домену для визначення можливих термінів взаємодії, порогів, категорійних стратегій кодування змінної тощо. Підходити до проблеми таким чином явно було б більш продуктивним, ніж намагатися витягнути сенс із вичерпного файлу, створеного інженером бази даних без навчання в МЛ.
Крім того, якщо ви дізнаєтесь, скажімо, що певний числовий стовпчик зовсім не є числовим, а скоріше поштовим індексом, ну ви можете перейти та отримати дані з сторонніх джерел даних, таких як перепис США, щоб збільшити ваші дані. Або якщо у вас є дата, можливо, ви включите ціну закриття S&P 500 на цей день. Такі зовнішні стратегії збільшення вимагають детального знання конкретного набору даних та значних знань про домен, але зазвичай мають набагато більший окуп, ніж чисті алгоритмічні вдосконалення.
Отже, перша велика різниця між індустрією та Kaggle полягає в тому, що в промисловості функції (в сенсі вхідних даних) є оборотними.
Другий клас відмінностей - це продуктивність. Часто моделі будуть розгорнуті для виробництва одним із двох способів: 1) передбачення моделі буде попередньо обчислено для кожного ряду в дуже великій таблиці бази даних, або 2) додаток або веб-сайт передадуть моделі єдиний ряд даних і потрібен прогноз, що повертається в режимі реального часу. Обидва випадки використання вимагають хорошої продуктивності. З цієї причини ви не часто бачите моделі, які можуть повільно передбачати або використовувати величезну кількість пам'яті, наприклад, K-Найближчі-Сусіди або Надвипадкові ліси. Логістична регресія або нейронна мережа, навпаки, можуть набирати партію записів з кількома матричними множеннями, а множення матриць може бути оптимізовано за допомогою правильних бібліотек.Незважаючи на те, що я міг би отримати +0,001 AUC, якби я склав ще одну непараметричну модель, я би цього не зробив, тому що пропускна здатність та затримка прогнозів впаде занадто сильно.
У цьому є і аспект надійності - складання чотирьох різних сучасних сторонніх бібліотек, скажімо, LightGBM , xgboost , catboost і Tensorflow ( звичайно, на GPU ), може призвести до того, що скорочення MSE на .01 виграє змагання в Kaggle, але це чотири різні бібліотеки для встановлення, розгортання та налагодження, якщо щось піде не так. Чудово, якщо ви зможете все це працювати на своєму ноутбуці, але запустити його в контейнер Docker, що працює на AWS, - зовсім інша історія. Більшість компаній не хочуть виступати перед невеликою командою девес, аби вирішувати подібні проблеми розгортання.
Але це означає, що укладання в собі не обов'язково є величезною справою. Насправді, укладання декількох різних моделей, які працюють однаково добре, але мають дуже різні межі прийняття рішень, - це чудовий спосіб отримати невеликий удар в AUC і великий удар в надійності. Просто не закидайте стільки кухонних мийок у ваш неоднорідний ансамбль, що у вас починають виникати проблеми з розгортанням.