Jednotka 10 / 11

Únik dat a reprodukovatelnost: Tiché katastrofy a kázeň

zisky:

  • Schopnost rozpoznat typy úniku dat (cíl, čas, předběžné zpracování, seskupený řádek) a dotazovat se na skóre „příliš dobré, aby to byla pravda“ jako alarm
  • Schopnost zabránit úniku včasným oddělením testovací sady, potrubí a správným rozdělením (chronologické/seskupené)
  • Schopnost provést analýzu reprodukovatelnou pomocí pevných semen, řízení verzí a odstranění manuálních kroků

Existují dvě chyby, které v datové vědě plýtvají nejvíce úsilím, a obě jsou zákeřné, protože vedou ke katastrofě právě ve chvíli, kdy se vše „zdá být v pořádku“. Prvním je únik dat: model funguje na testovací sadě skvěle, ale ve výrobě se zhroutí. Druhým je nereprodukovatelnost: provedete analýzu o šest měsíců později a získáte úplně jiný výsledek. Tato jednotka se zaměřuje na to, aby tyto dvě nástrahy do hloubky poznala a vyhnula se jim. Umělá inteligence může obě rizika zvýšit (rychle generuje, navrhuje skryté úniky, usnadňuje vám manuální kroky), ale může je také snížit, pokud se použije správně. Rozdíl je v disciplíně.

Únik dat: jasnovidný model

Únik dat je, když model během tréninku vidí informace, které nebude mít v době skutečné predikce. Model s touto informací „podvádí“, na testovací sadě vypadá skvěle, ale bez této informace ve výrobě havaruje. Symptom úniku je téměř vždy stejný: příliš dobrý, aby to byla pravda. Než se budete radovat, když uvidíte 99% přesnost, měli byste hledat netěsnosti.

Hlavní typy úniku jsou:

1. Únik gólu: Funkce je výsledkem gólu. V prognóze „bylo zrušeno“ jsou sloupce „datum zrušení“ nebo „částka vrácení peněz“ výsledkem cíle; Budou vyplněny, až když bude jasný výsledek.

2. Únik času: Přenesení budoucích informací do minulosti. Při výpočtu „průměru za posledních 30 dní“ zahrňte dny po dni předpovědi nebo rozdělte časovou řadu náhodně.

3. Únik před zpracováním: Učení transformací, jako je škálování, plnění, kódování ze všech dat před tréninkovým/testovacím oddílem. Průměrování testovacích dat narušuje trénink.

4. Netěsnost duplicitních/seskupených řádků: Řádky patřící stejné osobě jsou přítomny při školení i testování (dvě návštěvy stejného pacienta v různých sadách). Model si člověka zapamatuje.

Typ úniku

Jak se rodí

Jak zabránit

cílový únik

Sloupec, který je výsledkem cíle

Test "Mám to v době predikce"?

únik času

Přenesení budoucnosti do minulosti

Chronologické členění, ovládání oken

Únik předzpracování

Předrozdělená konverze

Potrubí, fit jen z tréninku

Netěsnost seskupeného řádku

Stejná jednotka ve dvou sadách

Rozdělit podle skupiny (GroupKFold)

Jediná disciplína, jak zabránit úniku

Společné řešení pro všechny typy úniků se scvrkává do jedné věty: Izolujte testovací sadu co nejdříve, abyste napodobili skutečnou budoucnost, a nic ji „neučte“. V praxi to znamená: nejprve rozdělte, poté se všechny transformace naučte pouze z tréninku a aplikujte je v pipeline (struktura, která shromažďuje všechny kroky v jediném řetězci). U každé funkce položte otázku „mám tyto informace v době předpovědi?“ Pokud je čas, rozdělte jej chronologicky; Pokud se stejná jednotka opakuje, rozdělte ji do skupin.

Pozor: Nejnebezpečnějším aspektem úniku je to, že se prezentuje jako úspěch. Špatný model bude mít zjevně špatné výsledky a bude si ho všimnout; Uniklý model funguje skvěle, potěší každého a je uveden do výroby – tam začíná kolaps. Proto je „velmi dobrý“ výsledek důvodem k poplachu, nikoli k oslavě.

Reprodukovatelnost: získání stejného výsledku dvakrát

Reprodukovatelnost je schopnost získat stejný výsledek při opětovném spuštění analýzy v jiném čase na jiném počítači. Bez toho je vaše analýza náhodná, ne vědecká. Hlavní příčiny a řešení, které zhoršují reprodukovatelnost:

Ruční kroky: Ruční změna buňky v Excelu, ruční úprava grafu. Řešení: mějte každý krok v kódu.

Nefixovaná náhodnost: Trénink modelu, vzorkování, rozdělení zahrnují náhodnost. Řešení: opravte náhodné semeno (počáteční hodnota generátoru náhodných čísel) (random_state=42).

Posuny verzí: Výsledek se může změnit, když se změní verze knihovny. Řešení: opravte závislosti (requirements.txt, soubor prostředí).

Žádné vedení záznamů: Není jasné, která data, který kód, který parametr byl použit. Řešení: správa verzí (Git — systém, který ukládá všechny verze kódu) a verzování dat.

"Funguje to pouze na mém počítači": Řešení: zdokumentujte prostředí, pokud je to možné, použijte kontejnery (Docker).

tři mini pouzdra

Případ 1 – Cílový únik. Zdravotní analýza obsahovala sloupec „léky po propuštění“ při předpovídání „zda bude pacient znovu přijat“. Tento sloupec byl naplněn až po propuštění pacienta. Model dal 96 %, ve výrobě 61 %. Projekt na 8 týdnů byl odpad. Lekce: zeptejte se každé funkce „je přítomna v době predikce?“

Případ 2 – Únik předzpracování. Jeden tým škáloval všechna data a poté je rozdělil. Průměr testovacích dat byl zahrnut do škálování. CV skóre 89 %, skutečná produkce 76 %. Falešný úspěch zmizel, když jsem se přestěhoval do Pipeline a o proměnách se dozvěděl až z tréninku. Lekce: nejdříve rozděl, později přeměň.

Případ 3 – Selhání reprodukce. Jeden analytik chtěl o tři měsíce později aktualizovat tabulku, kterou předložil vedení, ale nemohl si vzpomenout, jak ji vytvořil; mnoho kroků bylo provedeno ručně v Excelu. Výsledek nevyšel a důvěra byla otřesena. Lekce: žádné ruční kroky, vše je v kódu a Gitu.

Čtyři kopírovatelné šablony

1) Kontrola těsnosti:

Vaše role: inspektor úniku. Cíl: "churn" (0/1), referenční datum prognózy: record_date. Dám vám tento seznam funkcí. Pro KAŽDOU funkci: (a) je to důsledek cíle, (b) je mi k dispozici v době predikce, (c) zahrnuje časové okno budoucnost? Označte to jako „nebezpečné/podezřelé/únik“ a napište důvod. Vlastnosti: [seznam]

2) Potrubí bez úniku:

Nastavte sklearn Pipeline: nejprve rozdělte vlak/test (stratified, seed=42), POTOM vložte veškeré předzpracování (impute, scale, encode) do potrubí POUZE z tréninku. Vysvětlete, proč je kód bez úniku, který krok se kde naučil.

3) Kód kontrolního seznamu reprodukovatelnosti:

Chci, aby byla moje analýza reprodukovatelná. Navrhněte kód/strukturu, která přidá: (1) pevný základ pro veškerou náhodnost, (2) použité verze knihovny pro tisk, (3) značku data/verze pro data a výstup. Poskytněte mi také kontrolní seznam, abyste se ujistili, že neexistují žádné ruční kroky.

4) Seskupený oddíl (stejný únik jednotky):

V datech existuje stejné customer_id ve více řádcích. Proveďte rozdělení (GroupKFold orGroupShuffleSplit, group = customer_id), které zabrání tomu, aby se stejný zákazník zúčastnil školení i testování. Zahrňte kód pro ověření, že po rozdělení nejsou žádní zákazníci v obou sadách.

Slabá výzva / Silná výzva

Slabá výzva:

Můj model vrátil 98% přesnost, není to skvělé? Optimalizujte kód.

Oslava 98 % skryje únik. Před optimalizací je třeba si položit otázku, zda je toto skóre skutečné nebo ne.

Výkonná výzva:

Vaše role: inspektor úniku. Můj model vrací 98% přesnost na testovací sadě, což mi zní „příliš dobré na to, aby to byla pravda“. Zkontrolujte: (1) zda jsou nějaké funkce výsledkem cíle, (2) zda jsou konverze provedené před rozdělením, (3) jsou stejné jednotky ve dvou sadách, (4) zda existují nějaké časové úniky. Uveďte všechny podezřelé body; Soustřeďte se na nalezení úniku, ne na opravu skóre.

Zde je vysoké skóre považováno za znamení, které je třeba zpochybňovat, nikoli oslavovat.

Časté chyby

  • Oslava „velmi dobrý“ výsledek. Příliš dobré skóre na to, aby bylo pravdivé, je upozornění na únik, nikoli úspěch.
  • Učení transformace ze všech dat před rozdělením. Nejběžnější únik; Rozdělte nejprve potrubím.
  • Náhodné rozdělení časové řady. Model vidí budoucnost; Chronologické členění je nutností.
  • Ponechání stejné jednotky ve dvou sadách. Model si osobu zapamatuje; Rozdělit podle skupiny.
  • Ne vstupovat ručně a zapisovat do kódu. Analýza se stává nereprodukovatelnou; vše by mělo být v kódu a Gitu.
Tip: Na začátek svého projektu napište "slib cti" o dvou větách: "Nijak jsem se testovací sady nedotkl, než jsem ji viděl ve výrobě. Každý krok je v kódu a seed je opraven." Pokud se nemůžete čestně podepsat pod tyto dvě věty, váš výsledek ještě není spolehlivý.

V souhrnu

Únik dat a nereprodukovatelnost jsou dvě nejdražší tiché chyby v datové vědě. Únik je modelovou vizí budoucnosti a prezentuje se jako falešný úspěch; Řešením je rozdělit testovací sadu brzy, naučit se transformace pouze z tréninku (pipeline), položit každému prvku otázku „Mám to v době predikce“ a provést správné rozdělení (chronologické/seskupené). Reprodukovatelnost je schopnost získat stejný výsledek dvakrát; jeho řešením je ručně odstranit kroky, připnout seed, zmrazit verze a ponechat vše v Gitu. AI může tato rizika buď zvýšit, nebo snížit; Je to vaše disciplína, která rozhoduje.

Aplikační úkol

Vezměte si seznam funkcí modelu, který jste vytvořili (nebo hypotetického modelu) a položte každému prvku otázku: „Mám tyto informace v době predikce?“ písemně; Najděte alespoň jednoho kandidáta na únik. Poté vyplňte kontrolní seznam, aby byla vaše analýza reprodukovatelná: je seed opravený, existují ruční kroky, jsou verze registrované, jsou v Gitu. Opravte nedostatky.

kontrolní seznam

  • [ ] Dotazoval jsem se na skóre „too good to be true“ jako upozornění na únik?
  • [ ] Naučil jsem se všechny transformace po rozdělení jen z tréninku?
  • [ ] Dělil jsem podle struktury času/skupiny (chronologicky/GroupKFold)?
  • [ ] Udělal jsem veškerou náhodnost opakovatelnou s pevným semínkem?
  • [ ] Odstranil jsem ruční kroky a ponechal jsem vše pod kontrolou kódu a verzí?