единици
1. Въведение в изкуствения интелект в науката за данните и анализа: работен процес, роли, граници, валидиране и етика 2. Събиране на данни и разбиране на източника: схема, вземане на проби, качество и информираност за течове 3. Почистване и предварителна обработка на данни: Липсваща стойност, отклонение и преобразуване на типа 4. Проучвателен анализ на данни (EDA): Разпределения, връзки и първоначални прозрения 5. Инженеринг на функции: Генериране на варианти, кодиране, мащабиране и избягване на изтичане 6. Изграждане на модел: дефиниране на проблем, избор на алгоритъм и разделяне на обучение/тест 7. Оценка на модела: показатели, кръстосано валидиране и екстремно обучение 8. Визуализация и разказване на истории: точни графики, честни графики 9. Генериране на код: AI-подпомогнат анализ с Python (pandas) и SQL 10. Изтичане на данни и възпроизводимост: тихи бедствия и дисциплина 11. Фондация MLOps, етика, поверителност и отговорен анализ
единица 10 / 11

Изтичане на данни и възпроизводимост: тихи бедствия и дисциплина

Печалби:

  • Възможност за разпознаване на типове изтичане на данни (цел, време, предварителна обработка, групиран ред) и запитване до резултата „прекалено хубаво, за да е истина“ като аларма
  • Възможност за предотвратяване на изтичане с ранно отделяне на комплекта за изпитване, тръбопровода и правилно разделяне (хронологично/групирано)
  • Възможност да направите анализа възпроизводим с фиксирани семена, контрол на версиите и премахване на ръчни стъпки

Има две грешки, които губят най-много усилия в науката за данните, и двете са коварни, защото водят до катастрофа точно когато всичко „изглежда е наред“. Първият е изтичането на данни: моделът работи чудесно на тестовия набор, но се срива в производството. Второто е невъзпроизводимостта: пускате анализ шест месеца по-късно и получавате напълно различен резултат. Тази част е посветена на познаването и избягването на тези два капана в дълбочина. AI може да увеличи и двата риска (генерира бързо, предполага скрити течове, улеснява ви да предприемете ръчни стъпки), но може също така да ги намали, ако се използва правилно. Разликата е в дисциплината.

Изтичане на данни: модел на ясновидец

Изтичането на данни е, когато моделът вижда информация по време на обучение, която няма да има по време на действителното прогнозиране. Моделът "изневерява" с тази информация, изглежда страхотно на тестовия комплект, но се срива в производството без тази информация. Симптомът на изтичане е почти винаги един и същ: твърде добър, за да е истина. Преди да се зарадвате, когато видите 99% точност, трябва да потърсите течове.

Основните видове течове са:

1. Изтичане на цел: Характеристиката е резултат от целта. В прогнозата „беше отменен“, колоните „дата на анулиране“ или „сума на възстановяване“ са резултат от целта; Те ще бъдат попълнени едва когато резултатът е ясен.

2. Изтичане на време: Пренасяне на бъдеща информация в миналото. Когато изчислявате „средната стойност за последните 30 дни“, включете дните след деня на прогнозата или разделете времевия ред на случаен принцип.

3. Изтичане на предварителна обработка: Трансформации на обучение като мащабиране, попълване, кодиране от всички данни преди дяла за обучение/тестване. Осредняването на данните от теста пречи на обучението.

4. Дублиране/групирано изтичане на ред: Редове, принадлежащи на едно и също лице, присъстват както в обучението, така и в тестването (две посещения на един и същи пациент в различни групи). Моделът запаметява човека.

Тип теч

Как се ражда

Как да предотвратим

целево изтичане

Колона, която е резултат от целта

Тест "Имам ли го в момента на прогнозиране".

изтичане на време

Пренасяне на бъдещето в миналото

Хронологично разделение, витринен контрол

Теч при предварителна обработка

Преобразуване преди разделяне

Тръбопровод, подходящ само от тренировка

Изтичане на групирани редове

Една и съща единица в два комплекта

Разделяне по група (GroupKFold)

Единствената дисциплина за предотвратяване на изтичане

Общото решение за всички видове течове се свежда до едно изречение: Изолирайте тестовия набор възможно най-рано, за да имитирате реалното бъдеще, и не го „учете“ на нищо. На практика това означава: първо разделете, след това научете всички трансформации само от обучението и ги приложете в конвейер (структура, която събира всички стъпки в една верига). За всяка функция задайте въпроса „разполагам ли с тази информация по време на прогнозата?“ Ако има време, разпределете го хронологично; Ако една и съща единица се повтаря, разделете на група.

Внимание: Най-опасният аспект на изтичане на информация е, че се представя като успех. Лошият модел очевидно ще доведе до лоши резултати и ще бъде забелязан; Изтекъл модел работи страхотно, харесва всички и е пуснат в производство - оттук започва колапсът. Ето защо "много добър" резултат е повод за тревога, а не за празнуване.

Възпроизводимост: получаване на същия резултат два пъти

Възпроизводимостта е способността да получите същия резултат, когато стартирате анализ отново в друг момент, на друга машина. Без това вашият анализ е случаен, а не научен. Основни причини и решения, които нарушават възпроизводимостта:

Ръчни стъпки: Ръчна промяна на клетка в Excel, ръчно редактиране на диаграма. Решение: всяка стъпка да е в код.

Нефиксирана произволност: Обучението на модела, вземането на проби, разделянето включват произволност. Решение: коригирайте произволното начало (първоначалната стойност на произволния генератор) (random_state=42).

Промяна на версията: Резултатът може да се промени, когато се промени версията на библиотеката. Решение: коригирайте зависимостите (requirements.txt, файл на средата).

Няма водене на записи: Не е ясно кои данни, кой код, кой параметър е използван. Решение: контрол на версиите (Git — системата, която запазва всички версии на кода) и версия на данните.

„Работи само на моята машина“: Решение: документирайте средата, използвайте контейнери (Docker), ако е възможно.

три мини калъфа

Случай 1 — Целево изтичане. Здравен анализ включваше графата „лекарства след изписване“ при прогнозиране „дали пациентът ще бъде приет отново“. Тази колона се попълва едва след изписване на пациента. Моделът даде 96%, в производството 61%. 8-седмичният проект беше боклук. Урок: попитайте всяка функция "присъства ли в момента на прогнозиране?"

Случай 2 — Теч при предварителна обработка. Един екип мащабира всички данни и след това ги раздели. Средната стойност на данните от теста беше включена в мащабирането. CV резултат 89%, действително производство 76%. Фалшивият успех изчезна, когато се преместих в Pipeline и научих за трансформациите само от обучение. Урок: първо разделете, след това трансформирайте.

Случай 3 — Неуспешно възпроизвеждане. Един анализатор искаше да актуализира диаграмата, която представи на ръководството три месеца по-късно, но не можеше да си спомни как я е създал; много стъпки бяха направени ръчно в Excel. Резултатът не се получи и доверието беше разклатено. Урок: няма ръчни стъпки, всичко е в код и Git.

Четири копируеми шаблона

1) Проверка на течове:

Вашата роля: инспектор за течове. Цел: "отлив" (0/1), референтна дата на прогнозата: record_date. Ще ви дам този списък с функции. За ВСЯКА характеристика: (a) следствие от целта ли е, (b) достъпна ли е за мен по време на прогнозата, (c) времевият прозорец включва ли бъдещето? Маркирайте го като „небезопасно/подозрително/изтичане“ и напишете причина. Характеристики: [списък]

2) Тръбопровод без течове:

Настройте sklearn Pipeline: първо разделете влак/тест (стратифициран, seed=42), СЛЕД ТОВА поставете цялата предварителна обработка (импутиране, мащабиране, кодиране) в конвейера САМО от обучението. Обяснете защо кодът е без изтичане, коя стъпка къде е научена.

3) Код на контролния списък за възпроизводимост:

Искам да направя анализа си възпроизводим. Предложете код/структура, която добавя: (1) твърдо начално начало за всяка случайност, (2) използвани версии на библиотека за печат, (3) таг за дата/версия за данни и изход. Дайте ми също контролен списък, за да се уверя, че няма ръчни стъпки.

4) Групиран дял (изтичане на едно и също устройство):

В данните същият customer_id съществува в множество редове. Направете разделяне (GroupKFold илиGroupShuffleSplit, group = customer_id), което ПРЕДПАЗВА един и същ клиент да бъде едновременно в обучение и тестване. Включете код, за да проверите дали няма клиенти и в двата комплекта след разделянето.

Слаба подкана / Силна подкана

Слаба подкана:

Моят модел върна 98% точност, не е ли страхотно? Оптимизирайте кода.

Празнуването на 98% скрива теча. Преди да се оптимизира, трябва да се постави под въпрос дали този резултат е реален или не.

Мощна подкана:

Вашата роля: инспектор за течове. Моят модел връща 98% точност на тестовия набор, което ми звучи „твърде добре, за да е истина“. Проверете: (1) дали някои функции са резултат от целта, (2) направени ли са преобразуванията преди разделянето, (3) една и съща единица са в два набора, (4) има ли изтичане на време. Избройте всички подозрителни точки; Съсредоточете се върху намирането на теча, а не върху коригирането на резултата.

Тук високият резултат се третира като знак, който трябва да бъде поставен под въпрос, а не да бъде празнуван.

Често срещани грешки

  • Честване на "много добър" резултат. Резултатът, който е твърде добър, за да е истина, е предупреждение за изтичане на информация, а не постижение.
  • Изучаване на трансформацията от всички данни преди разделяне. Най-честият теч; Разделете първо с тръбопровод.
  • Разделяне на времевата поредица на случаен принцип. Моделът вижда бъдещето; Хронологичното деление е задължително.
  • Оставянето на една и съща единица в два комплекта. Моделът запаметява човека; Разделете по групи.
  • Без да влизате ръчно и да пишете в кода. Анализът става невъзпроизводим; всичко трябва да е в код и Git.
Съвет: Напишете „обет за чест“ от две изречения в началото на вашия проект: „Не съм докосвал тестовия набор по никакъв начин, преди да го видя в производство. Всяка стъпка е в кода и семето е фиксирано.“ Ако не можете да подпишете тези две изречения честно, вашият резултат все още не е надежден.

В обобщение

Изтичането на данни и невъзпроизводимостта са двете най-скъпи тихи грешки в науката за данните. Изтичането е визията на модела за бъдещето и се представя като фалшив успех; Решението е да разделите набора от тестове рано, да научите трансформациите само от обучение (конвейер), да зададете на всяка функция въпроса „Имам ли го по време на прогнозиране“ и да извърша правилно разделяне (хронологично/групирано). Възпроизводимостта е възможността да получите един и същ резултат два пъти; неговото решение е ръчно да премахне стъпките, да закачи семената, да замрази версиите и да запази всичко в Git. ИИ може или да увеличи, или да намали тези рискове; Вашата дисциплина е това, което определя.

Задача за приложение

Вземете списъка с функции на модел, който сте създали (или хипотетичен) и задайте на всяка функция въпроса „имам ли тази информация по време на прогнозирането?“ писмено; Намерете поне един кандидат за теч. След това попълнете контролен списък, за да направите анализа си възпроизводим: началната стойност е фиксирана, има ли ръчни стъпки, регистрирани ли са версиите, в Git ли са. Коригирайте недостатъците.

контролен списък

  • [ ] Зададох ли запитване за резултата „прекалено хубаво, за да е истина“ като предупреждение за теч?
  • [ ] Научих ли всички трансформации след разделяне, само от обучение?
  • [ ] Разделил ли съм според структурата на времето/групата (хронологично/GroupKFold)?
  • [ ] Направил ли съм цялата произволност повторяема с фиксирано семе?
  • [ ] Премахнах ли ръчните стъпки и запазих ли всичко в кода и контрола на версиите?