Серия: Тайвански набор от данни за кредитно неизпълнение

Тази статия е част от поредица, в която изследваме, обработваме предварително и изпълняваме няколко метода за машинно обучение върху набора от данни за кредитно неизпълнение на Тайван. Наборът от данни може да бъде намерен тук: набор от данни .

Два важни въпроса обикновено възникват, когато се опитваме да разберем как най-добре да моделираме набор от данни и да се надяваме да правим прогнози въз основа на него:

· Всички дадени характеристики уместни ли са и ако не, коя подгрупа ще бъде най-добра?

· Предвид най-добрата подгрупа от функции, кой модел на машинно обучение ще даде най-добри резултати?

Поради ограниченията на изчислителната мощност, дори сега, през 2022 г., е важно да се намали броят на измеренията до възможно най-малко, без да се жертват значителни количества информация. В тази статия ще разгледаме една стратегия за избор на най-доброто подмножество от функции, използвайки алгоритъма XGBoost. След това ще използваме полученото подмножество от данни, за да оценим няколко основни класификатора, за да решим кой заслужава повече време за настройка за оптимална производителност. Да започваме!

Първата стъпка е да импортирате някои първоначални пакети и да импортирате данните от Excel. По-долу сме импортирали данните в Pandas с помощно приложение, xlrd. Това ще ни позволи да импортираме .xls файлове и дори да изберем конкретния лист в работната книга. Това създава рамка от данни с 24 колони с 30 000 екземпляра. За по-подробен поглед върху този набор от данни вижте тази статия .

Сега ще импортираме повечето от пакетите, повечето от Scikit Learn, които ще използваме занапред.

Тази кратка част от кода ще раздели функциите от целевите променливи.

Следващата ни стъпка е да използваме train-test-split, за да ни предостави подгрупи от данни за обучение и тестване на нашите модели. Ще използваме 80/20разделяне (20% са тестови данни) и ще зададем random_state от 42, което изглежда е донякъде традиция.

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

За този пример ще използваме популярния алгоритъм XGBoost в режим на класификатор. Тук приспособяваме модела към данните за обучение и след това използваме атрибута feature_importances_, за да открием функциите, които запазват най-обяснимата вариация, като същевременно минимизират броят функции. В определен момент някои характеристики дават по-малко обяснителна сила, отколкото си заслужават по отношение на сложността.

Графиката по-долу показва индексните числа на всяка функция в рамката с данни и какво относително значение има всяка при прогнозирането на целевата променлива.

Според този анализ две характеристики изглежда имат по-голям дял от прогнозното тегло. Сега трябва да се отбележи, че чрез коригиране на n_estimators, learning_rate и/или max_depth в XGBClassifier, може да видим, че някои характеристики стават леко по-виден. Като цяло за този пример тази конфигурация работи добре.

Вместо просто да избираме най-добрите характеристики от поглед, можем да използваме някаква формула, за да ги изберем вместо нас. В този пример избрахме да изберем всички функции, които са по-големи от медианата на всички важности на характеристиките.

Сега ще извлечем имената на функциите, за да улесним справянето с тях в следващите стъпки.

От тези функции, които решихме да запазим, някои са категорични, докато други са непрекъснати цифрови характеристики. Следователно ще искаме да приложим различен тип трансформация към всеки, така че моделите да могат да използват данните добре. За да направим това, ще използваме Scikit Learn ColumnTransformer, за да приложим трансформациите по подходящ начин.

Има няколко начина за подготовка на категорични данни за моделиране. В този случай ще приложим OneHotEncoder към всички категорични функции. Тъй като решихме да подбираме функциите, които запазихме, тежестта на сложността ще бъде намалена. За всяка категорична функция OneHotEncoder ще създаде нова функция за всеки двоичен резултат в рамките на оригиналната функция. Например, ако една колона има 4 възможни категории, OHE създава 4 колони и след това поставя 0 или 1 във всеки ред, за да декларира дали тази категория липсва или присъства в този ред. Завършваме с представяне на оскъдни данни, което отчита категориите, но се използва по-лесно от моделите.

Зачисловите функции ще ги запазим прости и ще приложим към тях StandardScaler. Това стандартизира всяка характеристика, за да премахне средната стойност и мащаба на дисперсията на единица. С тази трансформация данните няма да бъдат толкова податливи на извънредни стойности. Има и други видове мащабиране, като например MinMaxScaler, но ние ще използваме StandardScaler.

Прилагаме трансформациите на колоните както към тренировъчните, така и към тестовите данни за X с метода fit.

Можем да видим имената на новите характеристики на трансформирания набор от данни по-долу:

С данните, намалени до по-съществени характеристики и трансформирани за използване в модели за машинно обучение, ние преминаваме към създаването на апарата за тестване на серия от класификаториедно до друго, за да получим по-добра представа като за които си струва да се проучи допълнително. Тази стъпка често се нарича избор на модел. Моделите в по-голямата си част нямат промени в хиперпараметрите. Пускаме ванилия версия на всеки, за да се опитаме да получим приблизителна оценка на относителните достойнства на всеки.

Стъпките по-долу са заимствани от и вдъхновени от книгата Machine Learning and Data Science Blueprints for Finance от Hariom Tatsat, Sahil Puri и Brad Lookabaugh (O'Reilly , 2021), 978–1–492–07305–5.

Препоръчвам да го прочетете. Има кратки и полезни описания на общи техники в машинното обучение, особено за финансовата област.

Първата стъпка е да създадете списък на Python и след това да добавите всеки от нашите кандидат класификатори към него.

След това задаваме стойности на параметри, като n_folds и scoring за KFold кръстосан валидатор. Тук изборът на roc_auc като показател за точкуване е важен. Нашата задача е контролирана двоична класификация, което означава, че имаме достъп до целевата променлива и това е двоичен избор, 0 или 1.

Графиката Площ под кривата на работната характеристика на приемника е много подходяща за тази класификационна задача. Той изобразява истинския положителен процент спрямо фалшиво положителния процент, като същевременно променя прага на дискриминация. Резултатът е областта на графиката, която е под получената линия. Перфектният резултат е 1,0, а не толкова добър резултат е някъде под 0,5. Колкото по-нисък е резултатът, толкова по-лошо се представя класификаторът. Също така резултат под 0,5 показва, че класификаторът не показва реална способност да предвиди целта.

И накрая, ще импортираме модула time на Python, за да можем да изчислим секундите, които изтичат за изпълнение на всеки класификатор. Отпечатваме резултатите на конзолата.

Накрая ще направим поредица от boxplots, които да ни помогнат да сравним различните класификатори.

Сравнени един до друг, можем да видим, че класификаторът XGBoost се представи по-добре от останалите. Споделяйки второто място, Логистичната регресия и Линеен дискриминантен анализобещават. С тази информация можем да продължим да се фокусираме върху един или два от тези класификатори и да настроим съответните им хиперпараметри. Използвайки този метод предварително, ние спестяваме време и енергия, като се фокусираме върху разработването на модели, които показват истински потенциал за изпълнение на поставената задача.

В друга статия ще направим точно това и ще видим колко добре един от тези неневронни мрежови подходи може да класифицира случаи на кредитно неизпълнение.