Добивки:
- Способност да се препознаат типови на истекување податоци (цел, време, претходна обработка, групиран ред) и да се побара резултатот „премногу добар за да биде вистинит“ како аларм
- Способност да се спречи истекување со рано одвојување на тест сет, цевковод и правилна поделба (хронолошка/групирана)
- Способност да се направи анализа репродуктивна со фиксни семиња, контрола на верзијата и отстранување на рачни чекори
Постојат две грешки кои трошат најмногу напор во науката за податоци, и двете се подмолни бидејќи водат до катастрофа токму кога „се чини дека е во ред“. Првиот е истекување на податоци: моделот работи одлично на тест сет, но паѓа во производството. Втората е неповторливост: правите анализа шест месеци подоцна и добивате сосема поинаков резултат. Оваа единица е посветена на длабинско познавање и избегнување на овие две замки. Вештачката интелигенција може да ги зголеми двата ризици (брзо генерира, сугерира скриени протекувања, ви го олеснува преземањето рачни чекори), но исто така може да ги намали ако се користи правилно. Разликата е во дисциплината.
Протекување податоци: видовит модел
Протекување податоци е кога моделот гледа информации за време на обуката што нема да ги има во моментот на вистинското предвидување. Моделот „изневерува“ со овие информации, изгледа одлично на тест-сетот, но паѓа во производството без тие информации. Симптомот на истекување е скоро секогаш ист: премногу добар за да биде вистинит. Пред да се радувате кога ќе видите 99% точност, треба да барате протекување.
Главните видови на истекување се:
1. Протекување гол: Карактеристиката е резултат на голот. Во прогнозата „беше откажано“, колоните „датум на откажување“ или „износ за враќање на средствата“ се резултат на целта; Тие ќе се пополнат само кога резултатот е јасен.
2. Протекување на време: Донесување на идните информации во минатото. При пресметување на „просекот на последните 30 дена“, вклучете ги деновите по прогнозираниот ден или поделете ги временските серии по случаен избор.
3. Протекување пред-обработка: Трансформации на учење како што се скалирање, пополнување, кодирање од сите податоци пред партицијата за обука/тестирање. Просекот на податоците од тестот го попречува тренингот.
4. Протекување на дупликат/групиран ред: Редовите кои припаѓаат на исто лице се присутни и во обуката и во тестирањето (две посети на ист пациент во различни групи). Моделот ја меморира личноста.
Тип на истекување
Како се раѓа
Како да се спречи
целно истекување
Колона која е резултат на целта
Тест „Дали го имам во време на предвидување“.
истекување на време
Донесување на иднината во минатото
Хронолошка поделба, контрола на прозорци
Протекување предобработка
Претходна поделба на конверзија
Гасовод, одговара само од тренинг
Протекување на групирани редови
Истата единица во два сета
Поделено по група (GroupKFold)
Единствената дисциплина за да се спречи истекување
Заедничкото решение за сите видови протекување се сведува на една реченица: Изолирајте го комплетот за тестирање што е можно порано за да ја имитирате вистинската иднина и не го „учувајте“ ништо. Во пракса, тоа значи: прво поделете, потоа научете ги сите трансформации само од обуката и применете ги во цевковод (структура која ги собира сите чекори во еден синџир). За секоја карактеристика, поставете го прашањето „дали ги имам овие информации во моментот на предвидувањето?“ Ако има време, поделете го хронолошки; Ако истата единица се повторува, поделете по група.
Внимание: Најопасниот аспект на истекувањето е тоа што се претставува како успех. Лошиот модел очигледно ќе даде лоши резултати и ќе биде забележан; Протечениот модел функционира одлично, ги радува сите и е пуштен во производство - тука започнува колапсот. Затоа „многу добар“ резултат е причина за тревога, а не за славење.
Репродуктивност: добивање на ист резултат двапати
Репродуктивноста е способност да го добиете истиот резултат кога повторно ќе извршите анализа во друго време, на друга машина. Без ова, вашата анализа е случајна, а не научна. Главни причини и решенија кои ја нарушуваат репродуктивноста:
Рачни чекори: Рачно менување на ќелија во Excel, рачно уредување графикон. Решение: имајте го секој чекор во кодот.
Непоправена случајност: Обука за модели, земање примероци, разделување вклучуваат случајност. Решение: поправете го случајното семе (почетната вредност на случајниот генератор) (случајна_состојба=42).
Верзијата се менува: резултатот може да се промени кога ќе се промени верзијата на библиотеката. Решение: поправете ги зависностите (requirements.txt, датотека со околина).
Без водење евиденција: не е јасно кои податоци, кој код, кој параметар се користени. Решение: контрола на верзијата (Git — систем што ги зачувува сите верзии на кодот) и верзии на податоци.
„Работи само на мојата машина“: Решение: документирајте ја околината, користете контејнери (Docker) ако е можно.
три мини футроли
Случај 1 - Целно истекување. Здравствената анализа ја прикажа колоната „лекови по отпуштање“ во предвидувањето „дали пациентот ќе биде повторно примен“. Оваа колона беше пополнета дури откако пациентот беше отпуштен. Моделот даде 96%, во производството 61%. Проектот од 8 недели беше ѓубре. Лекција: прашајте ја секоја карактеристика „дали е присутна во моментот на предвидување?“
Случај 2 - Протекување предобработка. Еден тим ги скалира сите податоци и потоа ги подели. Средната вредност на податоците од тестот беше вклучена во скалирањето. Резултат на CV 89%, вистинско производство 76%. Лажниот успех исчезна кога се преселив во Pipeline и дознав за трансформациите само од тренинг. Лекција: прво подели, подоцна трансформирај.
Случај 3 - Неуспех да се репродуцира. Еден аналитичар сакаше да го ажурира графиконот што му го претстави на раководството три месеци подоцна, но не можеше да се сети како го направил; многу чекори беа направени рачно во Excel. Резултатот не успеа и довербата беше разнишана. Лекција: нема рачни чекори, сè е во код и Git.
Четири шаблони за копирање
1) Проверка на истекување:
Вашата улога: инспектор за истекување. Цел: „превртување“ (0/1), прогнозиран референтен датум: датум на запис. Ќе ви ја дадам оваа листа на карактеристики. За СЕКОЈА карактеристика: (а) дали е последица на целта, (б) дали ми е достапна во моментот на предвидување, (в) дали временскиот прозорец ја вклучува иднината? Означете го како „небезбедно/сомнително/протекување“ и напишете причина. Карактеристики: [листа]
2) Гасовод без протекување:
Поставете sklearn Pipeline: прво поделете го возот/тестот (стратификуван, seed=42), ПОТОА вклопете ги сите преработки (импутирање, размер, кодирање) во цевководот САМО од обуката. Објаснете зошто кодот е без протекување, кој чекор е научен каде.
3) Код на список за проверка за репродуктивност:
Сакам да ја направам мојата анализа репродуктивна. Предложете код/структура која додава: (1) тврдо семе за сета случајност, (2) користени верзии на библиотека за печатење, (3) ознака за датум/верзија за податоци и излез. Исто така, дајте ми листа за проверка за да се уверам дека нема рачни чекори.
4) Групирана партиција (истекување на истата единица):
Во податоците, истиот customer_id постои во повеќе редови. Направете поделба (GroupKFold orGroupShuffleSplit, група = customer_id) што СПРЕЧУВА истиот клиент да биде и на обука и на тестирање. Вклучете код за да потврдите дека нема клиенти во двата сета по поделбата.
Слаб промпт / Силен промпт
Слаба навестување:
Мојот модел врати 98% точност, нели е супер? Оптимизирајте го кодот.
Прославувањето на 98% го крие истекувањето. Пред да се оптимизира, треба да се постави прашање дали овој резултат е реален или не.
Моќен потсетник:
Вашата улога: инспектор за истекување. Мојот модел враќа 98% точност на тест сет, што ми звучи „премногу добро за да биде вистинито“. Проверете: (1) дали некои карактеристики се резултат на целта, (2) се конверзиите направени пред разделување, (3) се иста единица во два сета, (4) дали има временски протекувања. Наведете ги сите сомнителни точки; Фокусирајте се на пронаоѓање на истекувањето, а не на поправање на резултатот.
Овде високата оценка се третира како знак да се доведе во прашање, а не да се слави.
Вообичаени грешки
- Прославување на „многу добриот“ резултат. Премногу добар за да биде вистинит резултат е предупредување за истекување, а не достигнување.
- Учење на трансформацијата од сите податоци пред поделба. Најчесто истекување; Поделете прво со цевковод.
- Разделување на временските серии по случаен избор. Моделот ја гледа иднината; Хронолошката поделба е задолжителна.
- Оставајќи ја истата единица во два сета. Моделот ја меморира личноста; Поделете по група.
- Не влегување во рачно и пишување во кодот. Анализата станува неповторлива; сè треба да биде во код и Git.
Совет: На почетокот на вашиот проект напишете „залог на честа“ од две реченици: „Не сум го допрел тест комплетот на кој било начин пред да го видам во производство. Секој чекор е во шифрата и семето е фиксирано“. Ако не можете искрено да ги потпишете овие две реченици, вашиот резултат сè уште не е сигурен.
Сумирано
Протекувањето на податоци и неповторливоста се двете најскапи тивки грешки во науката за податоци. Протекувањето е визија на моделот за иднината и се претставува како лажен успех; Решението е рано да се подели тест-сетот, да се научат трансформациите само од тренинг (цевковод), да се постави на секоја карактеристика прашањето „Дали го имам во моментот на предвидување“ и да се направи правилно разделување (хронолошко/групно). Репродуктивност е можноста да се добие ист резултат двапати; неговото решение е рачно да ги отстрани чекорите, да го закачи семето, да ги замрзне верзиите и да задржи сè во Git. ВИ може или да ги зголеми или намали овие ризици; Вашата дисциплина е таа што одредува.
Задача за апликација
Земете го списокот со карактеристики на моделот што сте го изградиле (или хипотетички) и поставете ја секоја карактеристика прашањето „дали ги имам овие информации во моментот на предвидување?“ во писмена форма; Најдете барем еден кандидат за протекување. Потоа пополнете список за проверка за да ја направите вашата анализа репродуктивна: дали семето е фиксирано, дали има рачни чекори, дали верзиите се регистрирани, дали се во Git. Поправете ги недостатоците.
листа за проверка
- [ ] Дали го прашав резултатот „премногу добар за да биде вистинит“ како предупредување за истекување?
- [ ] Дали ги научив сите трансформации по поделбата, само од тренинг?
- [ ] Дали сум поделил според структурата на времето/групата (хронолошка/GroupKFold)?
- [ ] Дали ја направив целата случајност повторлива со фиксно семе?
- [ ] Дали ги отстранив рачните чекори и задржав сè во кодот и контролата на верзијата?