Добивки:
- Способност да се произведат значајни деривативни карактеристики со знаење за доменот и да се кодираат категорични категории со соодветни методи (едно-жешко, етикета, цел)
- Способност за скалирање на нумерички променливи според типот на моделот (стандардизација, нормализација) и избегнување на непотребно или нецелосно скалирање
- Способност да се избегне истекување на карактеристики со учење на сите трансформации по поделбата на обуката/тестот и само од обуката
Има една стара поговорка во машинското учење: „Применетото машинско учење во суштина е инженерство на карактеристики“. Бидејќи успехот на моделот често доаѓа од тоа какви влезови му давате на моделот, наместо од кој алгоритам ќе го изберете. Инженерството на карактеристики е уметност на производство на значајни сигнали од необработени податоци од кои моделот може да учи. Вештачката интелигенција е богат извор на идеи во оваа фаза: кога ќе прашате „кои карактеристики може да се произведат од овие податоци“, таа наведува десетици предлози. Но, некои од овие предлози може да бидат вредни, некои може да бидат бескорисни, а некои може да бидат опасни (протекување). Ваша работа е да го средите.
Зошто функција инженеринг
Необработените податоци ретко доаѓаат до моделот во неговата најдобра форма. Додека колоната „датум на раѓање“ сама по себе е бесмислена, вредноста „возраст“ генерирана од неа е силен сигнал. Може да извлечете атрибути како „ден во неделата“, „ден/ноќ“, „дали е празник“ од „временскиот печат за нарачка“. Можете да комбинирате две колони за да создадете сооднос („однос долг/приход“). Овде, инженерството на карактеристики го преведува знаењето на доменот во математички сигнал; И токму затоа етапата која бара најмногу човечка интелигенција.
Конвертирање на категорични променливи во броеви: кодирање
Моделите генерално работат со бројки, а не со текст. Конвертирањето на категоричните променливи (како град, боја, тип на производ) во бројки се нарекува кодирање. Три вообичаени методи:
Едно-жешко кодирање: Отвора посебна колона со вредност од 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, долг_tl, град, категорија_производ. Цел: „дали заемот ќе се врати“ (0/1). Предложете 15 карактеристики што може да се генерираат од овие колони; наведете го ризикот од истекување (ниско/средно/високо) за секоја од нив. Јасно означете ги оние што содржат идни информации.
2) Безбедно кодирање (пост-сплит):
Напишете код кој еднократно ги шифрира „град“ и „категорија_производ“. ВАЖНО: поставете го кодирањето само на податоците за обуката, а потоа трансформирајте ги податоците од тестот (со sklearn OneHotEncoder). Објаснете како се справувате со невидената категорија (handle_unknown) во образованието.
3) Конверзија без протекување со Pipeline:
Поставете sklearn Pipeline: применете го StandardScaler на нумерички колони, OneHotEncoder на категорични колони, додадете класификатор на крајот. Гаранција дека сите трансформации се научени ПО поделбата на воз/тест и само од обуката. Објаснете го кодот и зошто е без протекување.
4) Карактеристика на временски прозорец (контрола на истекување):
Генерирајте го атрибутот „број на нарачки во последните 30 дена“ за секој клиент, но НИКОГАШ не вклучувајте податоци по денот на предвидувањето. Објаснете линија по ред дека кодот не гледа во иднината. Ќе ја дадам колоната за референтен датум.
Слаб промпт / Силен промпт
Слаба навестување:
Додадете добри својства на овие податоци.
„Добро“ е недефинирано, целта е нејасна, нема контрола на истекување. Вештачката интелигенција генерира случајни, можеби протечени карактеристики.
Моќен потсетник:
Вашата улога: инженерски инженер. Цел: „превртување за 30 дена“ (0/1), проценет референтен датум: save_date. Има историја на трансакции во df.Task: Генерирајте 8 карактеристики, одговорете на прашањето „Дали ги имам овие информации во моментот на предвидување“ за СЕКОЈ. Додавање на датум по референтниот датум во карактеристиките на временскиот прозорец. Напишете го кодот на начин компатибилен со гасоводот кој ќе се изврши по делот воз/тест.
Овде, целта, референтното време и контролата на истекување се дефинирани од почеток.
Вообичаени грешки
- Учење на трансформацијата од сите податоци пред поделба. Ако параметарот за скалирање/кодирање ги гледа податоците од тестот, се јавува истекување.
- Невнимателна употреба на целното кодирање. Тоа е најмоќниот, но најпропусен метод; само од обука, во вкрстена валидација.
- Додавање на иднината со функција на временски прозорец. Ако пресметката „последните 30 дена“ се внесе по денот на прогнозата, моделот ја гледа иднината.
- Непотребно скалирање во моделот на дрвото и нецелосно скалирање во линеарниот модел. Одлуките за скалирање се донесуваат според типот на моделот.
- Додавање на сите предлози за функции на вештачката интелигенција без прашање. Предлозите може да вклучуваат бескорисни и протечени функции.
Совет: запишете едно прашање за секоја карактеристика што ја генерирате: „Можам ли да ја пресметам оваа вредност со информациите што ги имам во моментот кога го правам предвидувањето? Ако одговорот не е јасен „да“, не користете ја функцијата. Оваа единствена дисциплина ги елиминира повеќето протекувања поврзани со карактеристики.
Сумирано
Инженерството на карактеристики е уметност на генерирање значајни сигнали од необработени податоци и често повеќе го одредува успехот на моделот отколку алгоритмот. Кодирање на категории (едно-жешко, ознака, цел), скалирање на нумерички (стандардизација, нормализација) и производство на деривативни карактеристики со знаење за доменот се основните алатки. Но, оваа фаза е и срцето на протекувањето: сите трансформации мора да се научат по поделбата на обуката/тестот и само од податоците за обуката. ВИ генерира многу идеи; Човечкото расудување е она што го разликува вредното од опасното.
Задача за апликација
Изберете целна променлива и дизајнирајте најмалку пет деривативни карактеристики од колоните што ги имате. За секој од нив одговорете писмено на прашањето „дали сум достапен во моментот на предвидувањето“ и елиминирајте барем едно како „висок ризик од истекување“. Потоа шифрирајте ги безбедните функции во цевковод што треба да се имплементира после партицијата.
листа за проверка
- [ ] Дали ги применив сите трансформации по поделбата на воз/тест?
- [ ] Дали ги научив само параметрите за скалирање/кодирање од обуката?
- [ ] Дали одговорив на прашањето „дали го имам во моментот на предвидување“ за секоја карактеристика?
- [ ] Дали се погрижив дополнително за методите со висок ризик, како што е целното кодирање?
- [ ] Дали решив да скалам соодветно за типот на моделот (дрво/линеарен)?