P2p lending na Bondoře zažívá značný boom (během 1 měsíce se skrze primární trh podepíše větší objem úvěrů než téměř za celý minulý rok). Současně však investoři čelí změnám v uživatelském rozhraní, resp. možnostech Portfolio managera, který řídí automatické investice. Ten nově nabízí jen filtrování podle tzv. Bondora rating, tedy skupin od A, B, C, D, E, F a HR pro nejrizikovější úvěry. Dříve efektivní možnosti filtrování zmizely, především chybí možnost filtrovat dle zemí a ukazatelů solventnosti (vzdělání, vlastnictví nemovitosti, apod.). Investoři logicky cítí, že jejich možnosti dosáhnout co nejvyšších výnosů (20+%) jsou nyní ohroženy. Nemožnost rozlišit problémové úvěry nevyhnutelně povede k vyšším mírám bankrotů v jednotlivých portfoliích a tedy i nižším celkovým ziskům z úroků.
Někteří uživatelé dávají najevo svou nelibost tím, že přestávají investovat anebo bojkotují Portfolio manager a investují výhradně ručně. Z objemu schválených úvěrů, ale vyplývá, že Bondora nemá nejmenší důvod něco měnit.
Zrychlilo se tempo růstu objemu upsaných úvěrů. Je to znát nárůstu křivky grafu za poslední měsíc (tj. od zrušení starých PM). Stouplo sice i tempo růstu manuálního biddování, ale nárůst tempa růstu automatických investic přes “hloupého” Portfolio manažera je řádově vyšší. Z toho je jasné, že majoritě uživatelů tento tupý PM bohužel stačí. To povede k rozdělení rizka na více uživatelů, ale i “zprůměrování” výnosů napříč celou platformou, resp. mezi jejími investory. Pro ty, co byli zvyklí nastavit chytře PM a profitovat tím ze svého knowhow to znamená snížení výnosů.
Bondora tedy nemá důvod nic měnit a tak se budeme muset naučit spolehnout se sami na sebe. Někdo má svou intuci, ale je dobré ji exaktně prověřit nejlépe skrze ML.
Inspirován jinými články na téma použití statistiky v p2p lendingu, zejména lucasem a kafkou399, jsem si chtěl zkusit přidat nějakou statistickou analýzu do toolboxu a otestovat efektivitu machine learningu na analýzu defaultu bondů na primárním trhu.
Kvůli jednoduchosti jsem zvolil základní lineární regresi a pokusil se namátkou zkusit pár parametrů z bondora data setu, který dává k dispozici každý den. Nejprve je nutné odebrat příliš čerstvé úvěry (60DayFromFirstPayment = 1), čímž zbude cca 13.000 řádek, tj. záznamů unikátních úvěrů. Následně je potřeba vybrat relevantní sloupce. Ty by měly být v ideálním případě na sobě navzájem nezávislé.
Age; Gender; credit_score; CreditGroup; IssuedInterest; LoanDuration; nr_of_dependants; income_from_principal_employer; income_total;
Jako špatný úvěr jsem si definoval ten s položkou AD (Actual Default), která nabývá hodnot 0 a 1. Tohle mi chybělo na kafkově práci, kde bral jako špatné úvěry jen fraudy (tj. úvěry kde neproběhla žádná splátka, žadatel prostě utekl s penězi).
Po rozdělení vzorku dat náhodně na dvě skupiny je jedna použita pro learning parametrů a druhá pro verifikaci. Lineární regrese a fitting parametrů pomocí Gradient descentu je při několika málo parametrech otázkou vteřin.
weight_0 = 0.41035;
weight_age = -0.00274;
weight_creditscore = -0.00027;
weight_IssuedInterest = 0.00599;
weight_nr_of_dependants = -0.01638;
weight_NoOfPreviousApplications = 0.00270;
weight_NoOfPreviousLoans = -0.00116;
Z výše uvedeného vyplývá, že vyšší věk žadatele, vyšší počet dětí žadatele, snižuje možnost bankrotu. Naopak vyšší úroková míra riziko bankrotu zvyšuje. Počet předchozích žádostí o úvěr mírně zvyšuje riziko, naopak počet předchozích realizovaných úvěrů koreluje s nižším rizikem. Zatím celkem logické.
carlos@griffin:~/bondora/simple_regression_php$ php guess.php Loading file ../bondora.data.random.part2.txt Threshold: 0.17 Data read. 6940 loans (1511 bad = 21.77%) False Positive error (Type I): 4096 False Negative error (Type II): 218 Err rate 7.665% Best 500 loans interest: 28.800% Best 500 Net interest: 21.135%
Při verifikaci/predikci je spektrum bondů zvolených k nákupu je posunuto pomocí thresholdu tak, aby se minimalizoval Error Type II. Je nutné se totiž vyhnout bondům, které u kterých byl predikován bezproblémový klient i když se jednalo o neplatiče. Error Type I neřešíte, dokud nemáte málo příležitostí k investicím a my chceme jen slíznout smetanu, tj. vrchních 5-15%.
Využití lineární regrese znamená na out-of-sample datech snížení míry bankrotu z 21,77% na 7,665%, tj. téměř trojnásobné snížení… Stále by bylo do čeho investovat, jelikož vybráno jako vhodná investice bylo 2844 bondů z toho 218 toxických (False Negative). Z těchto bondů by se dalo namixovat nejlepších 500 bondů (podle úrokové sazby) což by sice nevyhnutelně vedlo ke zvýšení míry bankrotů, ale dovolilo by to vytvořit portfolio pětiset úvěrů s průměrným úrokem 28,8% (brutto, bez odečtení odepsaných úvěrů).
Jsou to jen modely, které vychází z minulých dat, je tedy možné že nemusí nutně korelovat s aktuálními žádostmi o úvěry na tržišti. Především zda se něco zásadního nezměnilo v datech nebo ve struktuře žádostí o úvěr oproti minulosti. Zbývá tedy otázka jak to bude fungovat na reálném trhu.
Lineární regrese dává základní přehled, ale není ideální. Lepší by byla logistic regression, která dává predikce v intervalu <0,1>, tedy přímo pravděpodobnosti bankrotu konkrétního dluhopisu (to je užitečné pro další risk scoring modely, tak jak je využívají např. banky). Na netu najdete články o využití rozhodovacích stromů, např. pomocí algoritmu Random Forest. Dle mého ideální pro modelování investic do p2p bondů je komplexní Cox Hazard Model [2], používaný v medicíně, odhadující které parametry ovlivňují Survival rate. V našem případě tedy předpokládanou dobu, kdy bude bond splácet dle kalendáře. Současně by bylo vhodné rozšířit model o XIRR (extended internal rate of return) nebo NPV (net present value), tedy vzít v úvahu současnou hodnotu investice. To je ale na další zkoumání…
Pokus tedy na out-of-sample datech prokázal, že lze pomocí vhodně zvolených featur a lineární regrese snížit míru bankrotu u potenciálních investic v p2p půjčkách. U nákupu dluhopisů je ale důležité zvážit jak míru rizika tak i potenciální čistý výnos (marži po započtení všech nákladů na poplatky anebo markup na sekundárním trhu) diskontovaný k okamžiku nákupu.