единица 2 / 11

Тръбопровод за данни: събиране, почистване, маркиране и създаване на версии

Печалби:

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

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

Стъпки на линията за данни

Линията за данни обикновено минава през тези спирки:

  1. Събиране (поглъщане): Изтегляне на данни от източници (база данни, API, регистрационни файлове, потоци от събития).
  2. Валидиране: Проверка дали данните отговарят на очакваната схема, типове и диапазони.
  3. Почистване: Обработване на липсващи стойности, дублирани записи, извънредни стойности и несъответствия.
  4. Трансформация: Превръщане на необработени данни в атрибути - като например преобразуване на категорична променлива в число, създаване на "ден от седмицата" от дата.
  5. Разделяне: Разделяне на комплекти за обучение, валидиране и тестване.
  6. Версии: Записване кой модел е обучен с какви данни.

Изкуственият интелект спестява време, като генерира чернови на код и идеи, особено в стъпки 2, 3 и 4. Но решенията като кой запис да се отхвърли, коя липсваща стойност да се попълни и как, принадлежат на инженера, който познава данните; защото неправилното почистване може да внесе скрито отклонение в модела.

Проверка на данните: ранна защита на линията

Най-скъпите грешки започват не в производството, а там, където се пропуска стъпката за проверка. Проверката на схемата автоматично проверява дали всеки входящ пакет от данни отговаря на очакваната структура. Например колоната за възраст между 0-120 ли е, полето за имейл празно ли е, броят на колоните променен ли е?

Съвет: Поставете проверката в началото на реда. Колкото по-бързо бъдат уловени повредени данни, толкова по-евтино е да се коригират. Грешка в схемата, уловена в производството, е многократно по-скъпа от тази, уловена във фазата на обучение.

Напишете схема за валидиране с pandera (или Great Expectations) за следната схема на данни. Колони и правила:- user_id: цяло число, не може да бъде нула, уникално- възраст: цяло число, не може да бъде от 0-120- signup_date: дата, не може да бъде в бъдещето- държава: категорична, от набора {TR, DE, US, UK}- баланс: десетична, не може да бъде отрицателна Създаване на смислено съобщение за грешка за всяко нарушение на правилото. Покажете теста с примерна прекъсната линия в края на кода.

Почистване: човекът е този, който решава

Липсващите стойности са реалност за всеки набор от данни. Начини за обработка:

  • Изтриване: Отхвърляне на ред/колона с много висок процент липсващи. Но има риск от загуба на информация и пристрастия.
  • Импутация: Импутация със средна стойност, медиана, най-честа стойност или прогноза, базирана на модел.
  • Флаг: Съхраняване на информация за „липсва“ в отделна колона с флаг — понякога самата липса е сигнал.

Кое е правилното зависи от проблема. В набор от медицински данни информацията за „кръвната стойност не е измерена“ трябва да се запази, вместо да се изтрие; Защото дори отказът на лекаря да направи измервания е сигнал. AI може да ви даде опции и код; Вие избирате кой отговаря на реалността на полето.

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

Слаба подкана: „Попълнете липсващите стойности.“

Силна подкана: „Има липсващи стойности в следните колони: доход (12% липсващи, изкривено разпределение вдясно), last_login (30% липсващи). Предложете да попълните дохода с медиана, но обяснете защо медиана, а не средна стойност. За last_login приемете, че липсващата стойност може да е значителна (потребителят може никога да не е влизал); помислете за генериране на флаг never_logged_in вместо изтриване. Запишете отклонението, което всеки подход би добавете към модела."

Разлика: силната подкана дава информация за разпространението и значение на района; изкуственият интелект произвежда подкрепа за вземане на решения вместо механично запълване.

Етикетиране: качеството се измерва

При контролирано обучение (обучение, при което се дават примери с правилните отговори), това, което моделът научава, са етикети (етикети: правилният отговор за всеки пример). Качеството на етикета определя таван - ако хората етикетират непоследователно, моделът се учи непоследователно.

Споразумението между анотаторите измерва скоростта, с която различни хора дават един и същ етикет на една и съща проба; Изразява се с коефициент като Капа на Коен. Ниското съответствие показва или задачата е неясна, или инструкцията е слаба.

Изкуственият интелект помага при етикетирането по два начина: (1) изготвяне на насоките за анотация, (2) предварително етикетиране и каране на човека само да го коригира. Но предварителното етикетиране с LLM има клопка: системната грешка на модела може да изтече в целия набор от етикети. Ето защо хората винаги проверяват някои от етикетите на LLM.

Внимание: Не считайте етикетите, произведени от LLM, за „основна истина“. Проверете проба с човек и измерете съответствието LLM-човек. Ако съответствието е ниско, предварителното етикетиране ще причини повече вреда, отколкото полза.

Разделяне на данни: предотвратяване на изтичане

Най-опасната грешка при разделянето на данни на обучение/валидиране/тестване е изтичането на данни: смесването на тестова информация в обучение. Примери:

  • Записите на един и същ потребител попадат както в обучение, така и в тестване (групово изтичане).
  • Използване на бъдещето в обучението и миналото в тестването във времеви серии (времево изтичане).
  • Изчисляване на параметрите за мащабиране (нормализиране) от всички данни и след това разделяне.

Времевото разделяне е от съществено значение за проблеми, свързани с времето: тренирайте с миналото, тествайте в бъдещето. Случайното разделяне дава „бъдеща“ полза, която никога няма да се случи в производството и надува показателите.

Версиране на данни и възпроизводимост

„С какви данни обучихме този модел?“ Да можеш да отговориш на въпроса месеци по-късно е отличителната черта на сериозното ML инженерство. Версиите на данни съхраняват всяка моментна снимка на данни с идентификатор (хеш или маркер за версия). Инструменти като DVC (Data Version Control) данни за версия като код.

За да се възпроизведе резултатът от модел, трябва да се коригират три неща: версията на данните, версията на кода и произволното начално число. Не е възможно да се каже "Получих същия резултат" без това трио. Ще задълбочим възпроизводимостта в блок 11; но фиксирането на семената в тръбопровода за данни започва от тук.

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

Случай 1 - Запазено валидиране на схемата за деня. Когато екип преобразува ценовото поле на системата нагоре по веригата от стотинки в лири, всички цени паднаха 100 пъти. Проверката на схемата отхвърли партидата като "цена извън диапазона" и моделът не беше обучен с повредени данни. Без проверка грешката ще бъде забелязана само в производството с неправилни прогнози.

Случай 2 - Отклонение от неправилно попълване. В кредитен модел липсващите стойности на дохода бяха попълнени със средната стойност. Но липсващите доходи са предимно в групата с ниски доходи; осредняването изкуствено "обогати" тази група и моделът им предложи несправедливо висока граница. Поправен е проблемът с медиана + флаг за липса.

Случай 3 - Временно изтичане. Моделът за прогнозиране на търсенето изглеждаше страхотно на тестовата серия (95% точност), но се срина в производството. Защо: поради произволното разделяне, моделът е видял бъдещето. Преминаването към временно групиране намали точността на теста до 78% — но това беше истинска производителност и го запази в производството.

Копируеми шаблони

Разделете следния набор от данни на три набора: обучение/валидиране/тестване. Ограничение: Това е времева серия; Използвайте ТЕМПОРАЛНО разделяне (тренирайте в миналото, тествайте в бъдещето). Предотвратяване на изтичане на партида: имайте същия `customer_id` само в един клъстер. Изчислете параметрите за мащабиране САМО от набора за обучение, след което приложете към всички. Отпечатайте колко реда остават в кода на всяка стъпка и добавете assert, който проверява за липса на течове.

Напишете проект на насока за анотация за тази задача за етикетиране. Задача: [напр. Етикетирайте рецензията на клиента като положителна/отрицателна/неутрална] Изяснете граничните случаи: сарказъм, смесени емоции, как да етикетирате рецензията, несвързана с продукта? Дайте 5 примера и 3 трудни крайни случая, които ще повишат последователността между маркерите.

Създайте контролен списък за възпроизводимост за този тръбопровод за данни: - Как трябва да се коригира версията на данните? - Кои семена за произволност къде трябва да бъдат зададени? - Какви метаданни (хеш данни, брой редове, дата) трябва да се регистрират? Моята кодова база: [език/библиотека]

Проверете този код за почистване за изтичане на данни. По-конкретно погледнете това: параметрите за мащабиране/кодиране изчисляват ли се ПРЕДИ разделянето? Някаква статистика изчислява ли се от всички данни или само от обучение? Код: [код]

Таблица на решенията: стратегия за липсваща стойност

Статус

Препоръчителен подход

защо

Числено, изкривено разпределение

запълнете с медиана

Средната стойност се влияе от отклонения

Числен, симетричен

напълнете със средно

Защитава информацията

Дефицитът може да бъде значителен

Колона с флаг + попълване

Липсата е сигнал

Липсващ процент > 60%

Колона за оценка/отхвърляне

Шумът е твърде много

Категоричен

Категория "Неизвестен".

Не създава изкуствено мнозинство

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

  • Пропускане на проверката. Без контрол на схемата повредените данни се промъкват безшумно.
  • Мащабиране преди разделяне. Изтича статистика от тестове в образованието.
  • Използване на случайно разделяне във времеви серии. Той произвежда фалшиви високи показатели.
  • Сляпо доверие на етикетите на LLM. Систематичната грешка се разпространява в данните.
  • Версията на данните не се запазва. Не можете да възпроизведете резултата.
  • Механично пълнене със средна. Той игнорира значението на полето, добавя пристрастия.

В обобщение

Тръбопроводът за данни е основата на системата за машинно обучение и заслужава повече усилия от модела. Поставете проверка в горната част; вземане на решения за почистване и етикетиране с познания за домейна; предотвратяване на изтичане (групово и времево) в отделението; коригирайте версията на данните и семето. AI генерира код и идеи на този ред, но зависи от вас да решите кои данни да обработвате и как — защото всяко грешно решение тук преминава в модела като скрит недостатък.

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

Напишете схема за валидиране (pandera/Great Expectations) на вашия собствен набор от данни и умишлено добавете лош ред и покажете, че е хванат. След това разделете данните временно или групово, изчислете параметрите за мащабиране само от обучение и проверете дали няма изтичане с твърдение. Запишете версията на данните и броя на редовете във файл с метаданни.

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

  • [ ] Проверката на схемата се изпълнява в горната част на реда.
  • [ ] Избрах стратегията за липсваща стойност въз основа на значението на полето, не го попълних механично.
  • [ ] Измерих качеството на етикета (съответствие); Проверих от хора етикети за LLM.
  • [ ] Предотвратих групово и временно изтичане в панела.
  • [ ] Мащабиране/кодиране, изчислено само от набора за обучение.
  • [ ] Версия на данните, брой редове и записани начални стойности.