Печалби:
- Способност за създаване на смислени производни характеристики с познания за домейн и кодиране на категориални категории с подходящи методи (един горещ, етикет, цел)
- Възможност за мащабиране на числени променливи според типа модел (стандартизация, нормализация) и избягване на ненужно или непълно мащабиране
- Възможност за избягване на изтичане на функции чрез научаване на всички трансформации след разделянето на обучение/тест и само от обучение
Има една стара поговорка в машинното обучение: „Приложното машинно обучение е по същество инженерство на функции“. Тъй като успехът на един модел често идва от това какви входни данни давате на модела, а не кой алгоритъм избирате. Инженерингът на функции е изкуството да се произвеждат значими сигнали от необработени данни, от които моделът може да се учи. Изкуственият интелект е богат източник на идеи на този етап: когато попитате „какви характеристики могат да бъдат произведени от тези данни“, той изброява десетки предложения. Но някои от тези предложения може да са ценни, други може да са безполезни, а други може да са опасни (теч). Ваша работа е да го подредите.
Защо инженерство на функции
Необработените данни рядко достигат до модела в най-добрата си форма. Докато колоната „дата на раждане“ сама по себе си е безсмислена, стойността „възраст“, генерирана от нея, е силен сигнал. Можете да извлечете атрибути като "ден от седмицата", "ден/нощ", "празник ли е" от "времево клеймо на поръчката". Можете да комбинирате две колони, за да получите съотношение („съотношение дълг/доход“). Тук инженерството на функции превежда знанията на домейна в математически сигнал; И точно затова именно сцената изисква най-много човешка интелигентност.
Преобразуване на категорични променливи в числа: кодиране
Моделите обикновено работят с числа, а не с текст. Преобразуването на категорични променливи (като град, цвят, тип продукт) в числа се нарича кодиране. Три често срещани метода:
Еднократно кодиране: Отваря отделна колона със стойност 0/1 за всяка категория. За „град“ се образуват колони Истанбул, Анкара, Измир; Ако клиентът е от Истанбул, само тази колона ще бъде 1. Идеално, когато броят на категориите е малък; Ако има твърде много категории, се получават стотици колони (това се нарича „експлозия на размера“).
Кодиране на етикета: Дава номер на всяка категория (Истанбул=0, Анкара=1). Това е просто, но може случайно да научи модела на последователност (като Анкара > Истанбул); така че се използва с повишено внимание в неподредени категории.
Целево кодиране: Заменя всяка категория със средната стойност на целевата променлива в тази категория. Това е много мощен, но най-опасният източник на изтичане: ако вземете предвид целта на тестовите данни, моделът вижда бъдещето. Трябва да се изчислява само от данни за обучение и внимателно (в рамките на кръстосано валидиране).
Мащабиране: големите числа не затрупват модела
Някои модели (базирани на разстояние, линейни модели, невронни мрежи) са чувствителни към мащаба на променливите. Ако „доход“ (0-500 000) и „възраст“ (0-100) попадат в един и същ модел, доходът може да доминира, просто защото е по-голям. Мащабирането коригира това. Два често срещани метода: стандартизация (преобразува всяка стойност в „колко стандартни отклонения от средната стойност“) и нормализация (мин-макс нормализация — компресира стойностите в диапазона 0-1). Базираните на дърво модели (дървета на решенията, произволна гора) са нечувствителни към мащаба и не изискват мащабиране.
Внимание: Параметрите за мащабиране и кодиране (средно, стандартно отклонение, съпоставяне на средна категория) трябва да се изчисляват само от данните за обучение, след което същото трябва да се приложи към данните от теста. Включването на тестови данни е изтичане и кара вашия модел да изглежда по-добре, отколкото е в действителност.
Сърцето на изтичането в инженеринга на функции
Генерирането на функции е мястото, където най-често възниква изтичането на данни. Две типични грешки: Изтичане на време — създаване на функция, която включва бъдеща информация (включително дни след деня на прогнозата при изчисляване на „средната стойност за последните 30 дни“). Изтичане на статистика — изчисляване на характеристика (средно мащабиране, стойност на целево кодиране) от всички данни преди разделянето на обучение/тест. Правило: научете всяка трансформация, след като първо направите разделянето на влак/тест и само от данните за обучение. Най-безопасният начин да правите това редовно е да използвате конвейер - структура, която събира всички трансформации в една верига и ги прилага след разделянето.
Метод
за какво
Риск от изтичане
бележка
Едно горещо кодиране
Променлива с няколко категории
ниско
Разгъва размера в множество категории
Кодиране на етикета
Сортирана категория
ниско
Извън реда учи грешен ред
целево кодиране
Мултикатегория, силен сигнал
много високо
Само от образованието, в CV
стандартизация
Линейни/дистанционни модели
среден
Параметър зависи само от образованието
Функция за времеви прозорец
времеви редове
високо
Добавете бъдещето
три мини калъфа
Случай 1 — Ценно имущество. Кредитен екип генерира функцията „съотношение дълг към доход“ от необработените колони „месечен доход“ и „месечно плащане на дълг“. Тази единствена извлечена функция повиши точността на модела от 71% на 79%; защото процентът, а не абсолютният доход, наистина определяше риска. Поука: съотношенията, генерирани от познанието за домейна, са силни сигнали.
Случай 2 — Изтичане на целево кодиране. Един екип преобразува „пощенския код“ в число с целевото кодиране (средната скорост на оттегляне в тази област), но направи това от всички данни преди разделянето. Моделът даде 94% на тестовия комплект, спадайки до 68% в производството. 6 седмици усилия са пропилени. Урок: целевото кодиране се извършва внимателно, само в рамките на обучението.
Случай 3 — Забравяне на мащабиране. Един анализатор включи приходите (0-400 000) и възрастта на клиента (18-75) в базиран на разстояние модел без мащабиране. Моделът гледаше почти изключително на доходите, смазвайки ефекта на възрастта. Когато беше добавено мащабиране, сегментирането стана значимо. Урок: мащабирането не се пренебрегва в моделите за разстояние/линейни модели.
Четири копируеми шаблона
1) Генериране на идеи за функции (елиминирането зависи от вас):
Вашата роля: асистент по инженерни функции. Моите df колони: дата_на_рождение, време_на_поръчка (времево клеймо), доход_tl, дълг_тл, град, категория_продукт. Цел: "ще бъде ли върнат заемът" (0/1). Предложете 15 функции, които могат да бъдат генерирани от тези колони; посочете риска от изтичане (нисък/среден/висок) за всеки. Маркирайте ясно тези, които съдържат бъдеща информация.
2) Сигурно кодиране (след разделяне):
Напишете код, който еднократно кодира „град“ и „продуктова_категория“. ВАЖНО: съобразете кодирането само с данните за обучение, след това трансформирайте данните от теста (със sklearn OneHotEncoder). Обяснете как се справяте с невидимата категория (handle_unknown) в образованието.
3) Преобразуване без течове с тръбопровод:
Настройте sklearn Pipeline: приложете StandardScaler към цифрови колони, OneHotEncoder към категорични колони, добавете класификатор в края. Гаранция, че всички трансформации се научават СЛЕД разделянето на влак/тест и само от обучение. Обяснете кода и защо е без изтичане.
4) Функция за времеви прозорец (контрол на течовете):
Генерирайте атрибута „брой поръчки през последните 30 дни“ за всеки клиент, но НИКОГА не включвайте данни след прогнозния ден. Обяснете ред по ред, че кодът не гледа в бъдещето. Ще предоставя колоната за референтна дата.
Слаба подкана / Силна подкана
Слаба подкана:
Добавете добри свойства към тези данни.
„Добър“ е недефиниран, целта е неясна, няма контрол на теча. AI генерира произволни, може би пропускливи, функции.
Мощна подкана:
Вашата роля: инженер по функции. Цел: „отлив за 30 дни“ (0/1), прогнозна референтна дата: save_date. Има история на транзакциите в df.Task: Генерирайте 8 функции, отговорете на въпроса „Имам ли тази информация по време на прогнозиране“ за ВСЯКА. Добавяне на датата след референтната дата във функциите на времевия прозорец. Напишете кода по начин, съвместим с конвейера, който да бъде изпълнен след секцията за обучение/тест.
Тук целта, референтното време и контролът на теча са определени от самото начало.
Често срещани грешки
- Изучаване на трансформацията от всички данни преди разделяне. Ако параметърът за мащабиране/кодиране вижда данните от теста, възниква изтичане.
- Небрежно използване на целево кодиране. Това е най-мощният, но най-пропусклив метод; само от обучение, при кръстосано валидиране.
- Добавяне на бъдещето с функция за времеви прозорец. Ако изчислението „последните 30 дни“ е въведено след прогнозния ден, моделът вижда бъдещето.
- Ненужно мащабиране в дървовидния модел и непълно мащабиране в линейния модел. Решенията за мащабиране се вземат според типа модел.
- Добавяне на всяко предложение за функция на AI без съмнение. Предложенията може да включват безполезни и пропускливи функции.
Съвет: Запишете един въпрос за всяка функция, която генерирате: „Мога ли да изчисля тази стойност с информацията, която имам в момента, в който правя прогнозата?“ Ако отговорът не е ясно „да“, не използвайте функцията. Тази единствена дисциплина елиминира повечето течове, свързани с функции.
В обобщение
Инженерингът на функции е изкуството за генериране на значими сигнали от необработени данни и често определя успеха на модела повече от алгоритъма. Кодирането на категориални показатели (един горещ, етикет, цел), мащабиране на числени стойности (стандартизация, нормализиране) и създаване на производни характеристики със знания за домейн са основните инструменти. Но тази фаза е и сърцето на изтичането: всички трансформации трябва да бъдат научени след разделянето на обучение/тест и само от данните за обучение. AI генерира много идеи; Човешката преценка е тази, която разграничава ценното от опасното.
Задача за приложение
Изберете целева променлива и проектирайте поне пет производни функции от колоните, които имате. За всеки от тях отговорете писмено на въпроса „на разположение ли съм по време на прогнозата“ и елиминирайте поне един като „висок риск от изтичане“. След това кодирайте защитените функции в конвейер, който да бъде внедрен след разделяне.
контролен списък
- [ ] Приложих ли всички трансформации след разделянето на влак/тест?
- [ ] Научих ли само параметри за мащабиране/кодиране от обучение?
- [ ] Отговорих ли на въпроса „имам ли го в момента на прогнозиране“ за всяка функция?
- [ ] Внимавал ли съм с високорискови методи като целево кодиране?
- [ ] Реших ли да мащабирам по подходящ начин за типа модел (дървовиден/линеен)?