Прибуток:
- Можливість налаштувати конвеєр даних (збір, перевірка, очищення, перетворення, розділення, версії) і розміщення перевірки схеми на початку конвеєра
- Можливість приймати рішення про відсутнє значення та маркування на основі значення поля та поділу, щоб запобігти витоку даних (групового та тимчасового)
- Можливість створення відтворюваної бази даних шляхом фіксації версії даних і початкового числа випадковості
Справжня сила кожної системи машинного навчання полягає в даних, а не в моделі. Досвідчені інженери знають: «сміття входить, сміття виходить» — навіть найдосконаліша модель, яка отримує погані дані, дасть погані результати. У цьому розділі ми встановлюємо конвеєр даних (конвеєр даних: ланцюжок кроків, які готують необроблені дані для навчання моделі) від кінця до кінця та дізнаємося, на якому кроці цього рядка ми можемо безпечно використовувати штучний інтелект.
Кроки лінії даних
Лінія передачі даних зазвичай проходить через такі зупинки:
- Збір (завантаження): отримання даних із джерел (база даних, API, файли журналів, потоки подій).
- Перевірка: перевірка відповідності даних очікуваній схемі, типам і діапазонам.
- Очищення: обробка відсутніх значень, дублікатів записів, викидів і невідповідностей.
- Перетворення: перетворення необроблених даних на атрибути — наприклад, перетворення категоріальної змінної на число, створення «дня тижня» з дати.
- Поділ: поділ на набори для навчання, перевірки та тестування.
- Контроль версій: запис того, яка модель була навчена з якими даними.
Штучний інтелект економить час, генеруючи чернетки коду та ідеї, особливо на етапах 2, 3 і 4. Але такі рішення, як, який запис відкинути, яке відсутнє значення заповнити та як, належать інженеру, який знає дані; тому що неправильне очищення може внести приховане зміщення в модель.
Перевірка даних: завчасна оборона лінії
Найдорожчі помилки починаються не на виробництві, а там, де пропускається етап перевірки. Перевірка схеми автоматично перевіряє, чи кожен вхідний пакет даних відповідає очікуваній структурі. Наприклад, чи є стовпець віку між 0-120, чи поле електронної пошти пусте, чи змінилася кількість стовпців?
Порада: поставте перевірку на початку рядка. Чим раніше пошкоджені дані будуть виявлені, тим дешевше їх виправити. Помилка схеми, виявлена під час виробництва, коштує у багато разів дорожче, ніж помилка, виявлена на етапі навчання.
Напишіть схему перевірки за допомогою pandera (або Great Expectations) для наступної схеми даних. Стовпці та правила:- user_id: ціле число, не може бути нульовим, унікальним- age: ціле число, не може бути від 0-120- signup_date: дата, не може бути в майбутньому- country: категоричний, із набору {TR, DE, US, UK}- баланс: десятковий, не може бути від’ємним. Видавати значуще повідомлення про помилку для кожного порушення правила. Покажіть тест із прикладом ламаної лінії в кінці коду.
Прибирання: вирішує людина
Відсутні значення є реальністю кожного набору даних. Способи обробки:
- Видалення: видалення рядка/стовпця з дуже високим відсотком пропусків. Але є ризик втрати інформації та упередженості.
- Імпутація: імпутація із середнім значенням, медіаною, найбільш частим значенням або прогнозом на основі моделі.
- Позначка: Зберігання інформації про «відсутність» в окремому стовпчику з позначкою — іноді відсутність сама по собі є сигналом.
Який із них правильний, залежить від проблеми. У наборі медичних даних інформація про «невиміряний показник крові» має бути збережена, а не видалена; Тому що навіть відмова лікаря проводити вимірювання – це сигнал. AI може надати вам варіанти та код; Ви обираєте, який з них відповідає реальності поля.
Слабка підказка / Сильна підказка
Слабка підказка: «Заповніть пропущені значення».
Суттєва підказка: «У наступних стовпцях бракує значень: дохід (відсутнє 12%, розподіл праворуч), last_login (відсутнє 30%). Запропонуйте заповнити дохід медіаною, але поясніть, чому медіана, а не середнє значення. Для last_login припустіть, що відсутнє значення може бути значним (користувач, можливо, ніколи не входив у систему); подумайте про створення прапорця never_logged_in замість видалення. Запишіть упередження будь-якого підходу додати до моделі».
Відмінність: сильна підказка дає інформацію про розподіл і значення області; штучний інтелект виробляє підтримку прийняття рішень замість механічного наповнення.
Маркування: якість вимірюється
У контрольованому навчанні (навчання, у якому приклади наводяться з правильними відповідями), те, що вивчає модель, є мітками (мітками: правильна відповідь для кожного прикладу). Якість міток встановлює стелю — якщо люди маркують непослідовно, модель навчається непослідовно.
Угода між анотаторами вимірює швидкість, з якою різні люди надають ту саму позначку одному зразку; Він виражається таким коефіцієнтом, як каппа Коена. Низька відповідність означає, що завдання незрозуміле, або інструкція слабка.
Штучний інтелект допомагає в маркуванні двома способами: (1) складання вказівок для анотації, (2) попереднє маркування та надання людині лише виправлення. Але попереднє маркування за допомогою LLM має підводний камінь: систематична помилка моделі може просочитися у весь набір етикеток. Ось чому люди завжди перевіряють деякі ярлики LLM.
Увага: не розглядайте етикетки, створені LLM, як «основну правду». Перевірте зразок за допомогою людини та виміряйте відповідність LLM-людині. Якщо відповідність низька, попереднє маркування принесе більше шкоди, ніж користі.
Розділ даних: запобігання витоку
Найнебезпечнішою помилкою при розподілі даних на навчання/перевірку/тестування є витік даних: змішування тестової інформації з навчанням. приклади:
- Записи одного і того ж користувача потрапляють і в навчання, і в тестування (груповий витік).
- Використання майбутнього в навчанні та минулого в тестуванні в часових рядах (тимчасовий витік).
- Розрахунок параметрів масштабування (нормалізації) з усіх даних і подальше поділ.
Часове розщеплення має важливе значення для проблем, пов’язаних із часом: тренуйтеся з минулим, перевіряйте майбутнє. Випадкове поділ дає «майбутню» вигоду, яка ніколи не відбудеться у виробництві, і завищує показники.
Версійність даних і відтворюваність
«За допомогою яких даних ми навчали цю модель?» Можливість відповісти на запитання через кілька місяців є ознакою серйозної інженерії ML. Керування версіями даних зберігає кожен знімок даних з ідентифікатором (хеш або тег версії). Такі інструменти, як DVC (Контроль версій даних), дані версії, як-от код.
Щоб відтворити результат моделі, потрібно виправити три речі: версію даних, версію коду та випадкове початкове число. Без цієї трійки неможливо сказати «Я отримав той же результат». Ми поглибимо відтворюваність у блоці 11; але фіксація вихідного коду в конвеєрі даних починається звідси.
три міні-чохла
Випадок 1. Перевірка схеми дня збережена. Коли команда перетворила поле цін у системі вищої течії з пенні на ліри, усі ціни впали у 100 разів. Перевірка схеми відхилила партію як "ціна поза діапазоном", а модель не була навчена з пошкодженими даними. Без перевірки помилка буде помічена лише у виробництві з неправильними прогнозами.
Випадок 2 - Упередження неправильного заповнення. У кредитній моделі відсутні значення доходу були заповнені середнім значенням. Але відсутні доходи були переважно в групі з низькими доходами; усереднення штучно «збагатило» цю групу, і модель запропонувала їм несправедливо високу межу. Виправлено проблему з медіаною + прапорцем відсутності.
Випадок 3 - Тимчасовий витік. Модель прогнозування попиту виглядала чудово на тестовому наборі (точність 95%), але зазнала збою у виробництві. Чому: через випадкове розщеплення модель бачила майбутнє. Перехід до тимчасового групування знизив точність тесту до 78% — але це була реальна продуктивність і дозволила йому працювати.
Шаблони, які можна копіювати
Розділіть наступний набір даних на три набори: навчання/перевірка/тестування. Обмеження: це часовий ряд; Використовуйте ТЕМПОРАЛЬНЕ розщеплення (тренування в минулому, перевірка в майбутньому). Запобігайте пакетному витоку: мати той самий `customer_id` лише в одному кластері. Розрахуйте параметри масштабування ТІЛЬКИ з навчального набору, а потім застосовуйте до всіх. Виведіть, скільки рядків залишилося в коді на кожному кроці, і додайте твердження, яке перевіряє відсутність витоків.
Напишіть чернетку вказівок щодо анотації для цього завдання маркування. Завдання: [напр. Позначте відгук клієнта позитивним/негативним/нейтральним] Уточніть межові випадки: сарказм, змішані емоції, як позначити відгук, не пов’язаний із продуктом? Наведіть 5 прикладів і 3 складних крайніх випадки, які підвищать узгодженість між тегерами.
Створіть контрольний список відтворюваності для цього конвеєра даних: - Як слід виправляти версію даних? - Які початкові числа випадковості де потрібно встановити? - Які метадані (хеш даних, кількість рядків, дата) потрібно реєструвати? Моя кодова база: [мова/бібліотека]
Перевірте цей код очищення на предмет витоку даних. Конкретно подивіться на це: параметри масштабування/кодування обчислюються ПЕРЕД розділенням? Чи обчислюється якась статистика на основі всіх даних чи лише навчання? Код: [код]
Таблиця рішень: відсутня стратегія цінності
Статус
Рекомендований підхід
чому
Числовий, нерівний розподіл
заповнити медіаною
На середнє значення впливають викиди
Числовий, симетричний
заповнити середнім
Захищає інформацію
Дефіцит може бути значним
Колонка прапорця + заливка
Брак - це сигнал
Відсоток відсутніх > 60%
Оцінити/відкинути стовпець
Шуму занадто багато
Категоричний
Категорія «Невідома».
Не створює штучної більшості
Поширені помилки
- Пропуск перевірки. Без контролю схеми пошкоджені дані проникають безшумно.
- Масштабування перед поділом. Це просочує статистику тестів в освіту.
- Використання випадкового розбиття часових рядів. Він створює підроблені високі показники.
- Сліпо довіряти лейблам LLM. Систематична помилка поширюється по всіх даних.
- Не зберігається версія даних. Ви не можете відтворити результат.
- Механічне наповнення із середнім. Він ігнорує значення поля, додає упередження.
Підсумовуючи
Конвеєр даних є основою системи ML і заслуговує більше зусиль, ніж модель. Помістіть перевірку вгорі; приймати рішення щодо очищення та маркування зі знанням домену; запобігання витоку (групового і тимчасового) у відсіку; виправити версію даних і насіння. ШІ генерує код та ідеї на цьому рядку, але вам вирішувати, які дані обробляти і як — тому що кожне неправильне рішення тут переходить у модель як прихований недолік.
Аплікаційне завдання
Напишіть схему перевірки (pandera/Great Expectations) на власному наборі даних і навмисно додайте неправильний рядок і покажіть, що він був спійманий. Потім розділіть дані тимчасово або пакетно, обчисліть параметри масштабування лише з навчання та переконайтеся, що немає витоку за допомогою твердження. Запишіть версію даних і кількість рядків у файл метаданих.
контрольний список
- [ ] Перевірка схеми виконується у верхній частині рядка.
- [ ] Я вибрав стратегію відсутнього значення на основі значення поля, я не заповнював його механічно.
- [ ] Я виміряв якість етикетки (відповідність); Я перевірив теги LLM людиною.
- [ ] Я запобіг груповому та тимчасовому витоку на панелі.
- [ ] Масштабування/кодування, обчислене лише з навчального набору.
- [ ] Версія даних, кількість записаних рядків і вихідного коду.