"Nie ruszaj danych, AI się samo nauczy" - słyszałem to kilkanaście razy. Za każdym razem kończyło się źle.
Ukryty bias w surowych danych
Projekt HR: przewidywanie sukcesu kandydatów. Dataset zawierał 15 lat historii rekrutacji. Model działał świetnie na danych treningowych (92%), ale w praktyce promował tylko mężczyzn. Dlaczego? Przez 15 lat firma preferowała zatrudnianie mężczyzn - to było w danych, choć nie jako osobna kolumna. Model nauczył się korelacji pośrednich (hobby, uczelnie, lata doświadczenia).
Gdzie szukać problemów
- Niezbalansowanie klas: 95% klientów nie rezygnuje, 5% rezygnuje - model zawsze powie "nie zrezygnuje" i ma 95% accuracy
- Leakage: kolumna "data_rezygnacji" w datasecie do przewidywania rezygnacji. Oczywiste? Widziałem to w produkcji
- Historyczny bias: stare dane odzwierciedlają stare decyzje, często nieoptymalne
Praktyczne czyszczenie
Zawsze sprawdzam rozkłady: df['kolumna'].value_counts() pokazuje niezbalansowanie. Potem: czy wszystkie klasy mają sens? Kategoria występująca 3 razy na 10 tys. - usuń lub połącz z "inne".
Balansuję klasy przez SMOTE (oversampling mniejszości) lub undersampling większości. Zależy od przypadku.
Freelancer użył surowych logów serwerowych. Model idealnie przewidywał awarie... godzinę po ich wystąpieniu. Timestamp był w przyszłości względem innych cech.