Non posso parlare per l'intero settore, ovviamente, ma lavoro nel settore e ho gareggiato su Kaggle, quindi condividerò il mio POV.
Innanzitutto, hai ragione a sospettare che Kaggle non corrisponda esattamente a ciò che la gente sta facendo nel settore. È un gioco, soggetto a giocabilità, con molte restrizioni folli. Ad esempio, nel concorso Santander attualmente in corso :
- I nomi delle caratteristiche sono stati sottoposti a hashing artificiale per nascondere il loro significato
- Il set "training" era artificialmente limitato per contenere meno righe delle colonne in modo specifico, in modo che la selezione delle caratteristiche, la robustezza e la tecnica di regolarizzazione sarebbero indispensabili per il successo.
- Il cosiddetto set di "test" ha una diversa distribuzione marcatamente rispetto al training set e le due sono chiaramente non campioni casuali della stessa popolazione.
Se qualcuno mi fornisse un set di dati come questo al lavoro, mi offrirei immediatamente di lavorare con loro sull'ingegnerizzazione delle funzionalità in modo da poter ottenere funzionalità più utili. Suggerirei di usare la conoscenza del dominio per decidere su probabili termini di interazione, soglie, strategie di codifica delle variabili categoriche, ecc. Affrontare il problema in questo modo sarebbe chiaramente più produttivo del tentativo di estrarre significato da un file di scarico prodotto da un ingegnere di database senza formazione in ML.
Inoltre, se impari, diciamo, che una particolare colonna numerica non è affatto numerica ma piuttosto un codice postale, beh, puoi andare e ottenere dati da fonti di dati di terze parti come il censimento degli Stati Uniti per aumentare i tuoi dati. O se hai una data, forse includerai il prezzo di chiusura di S&P 500 per quel giorno. Tali strategie di aumento esterno richiedono una conoscenza dettagliata del set di dati specifico e una conoscenza di dominio significativa, ma di solito hanno i profitti molto più ampi rispetto ai puri miglioramenti algoritmici.
Quindi, la prima grande differenza tra l'industria e Kaggle è che nell'industria, le caratteristiche (nel senso dei dati di input) sono negoziabili.
Una seconda classe di differenze è la prestazione. Spesso i modelli verranno distribuiti alla produzione in due modi: 1) le previsioni del modello verranno pre-calcolate per ogni riga in una tabella di database molto grande, oppure 2) un'applicazione o un sito Web passerà al modello una singola riga di dati e è necessaria una previsione restituita in tempo reale. Entrambi i casi d'uso richiedono buone prestazioni. Per questi motivi, spesso non vedi modelli che possono essere lenti a prevedere o utilizzare un'enorme quantità di memoria come K-Clos-Neighbours o Extra Random Forests. Una regressione logistica o una rete neurale, al contrario, può segnare un lotto di record con alcune moltiplicazioni di matrice e la moltiplicazione di matrice può essere altamente ottimizzata con le librerie giuste.Anche se potrei ottenere +0.001 AUC forse se impilassi su un altro modello non parametrico, non lo farei perché il rendimento della previsione e la latenza calerebbero troppo.
C'è anche una dimensione di affidabilità in questo - impilare quattro diverse librerie di terze parti all'avanguardia, ad esempio LightGBM , xgboost , catboost e Tensorflow (su GPU , ovviamente) potrebbe darti quella riduzione .01 di MSE che vince le competizioni di Kaggle, ma sono quattro diverse librerie da installare, distribuire e eseguire il debug se qualcosa va storto. È fantastico se riesci a far funzionare tutte quelle cose sul tuo laptop, ma farlo funzionare all'interno di un contenitore Docker in esecuzione su AWS è una storia completamente diversa. La maggior parte delle aziende non vuole far fronte a un piccolo team di sviluppatori solo per affrontare questo tipo di problemi di implementazione.
Detto questo, impilare in sé non è necessariamente un grosso problema. In effetti, impilare un paio di modelli diversi che si comportano tutti ugualmente bene ma che hanno limiti di decisione molto diversi è un ottimo modo per ottenere un piccolo aumento nell'AUC e un grande aumento nella robustezza. Basta non buttare così tanti lavelli da cucina nel tuo insieme eterogeneo che inizi ad avere problemi di distribuzione.