Don’t work harder, work smarter!

Don’t work harder, work smarter

Van A naar B

Een hypotheekaanvraag heeft verschillende statuswijzigingen tijdens het acceptatieproces. Onlangs was ik bezig met het zoeken naar alle mogelijke statuswijzigingen van ‘ontvangen’ naar ‘geaccepteerd’ voor hypotheekaanvragen. Een aanvraag wordt ontvangen; een offerte wordt gestuurd; er wordt gewacht op documentstukken en een lening gaat ‘in beheer’. Het begin van het traject is het ontvangen van een aanvraag en het einde is, als het goed is, een lening in beheer.

Don’t work harder, work smarter!

Van ontvangen naar lening in beheer kan op meerdere manieren in dit bovenstaande versimpelde schema. Als we puur van links naar rechts kijken zijn dat er twee: 1-2-3-4-5 en 1-3-4-5. Echter, zoals het schema laat zien in rood, zit er een lus in de structuur. Hierdoor kan er op een oneindig aantal manieren van aanvraag naar uiteindelijk ‘in beheer’ worden gegaan, namelijk telkens door status 3 en 4 te herhalen. Het hypotheekacceptatie proces is, zacht uitgedrukt, iets uitgebreider. In een ideaal scenario worden er maximaal 16 verschillende statussen gebruikt, maar in het proces zitten wel 6 verschillende lussen. Het schematische ideale verloop van de statussen kunt u vinden in bijlage 1.

Waar ik op zoek naar was, is op hoeveel verschillende manieren de keten kon worden doorlopen van begin tot eindpunt op deze ‘ideale’ manier. Daarnaast wilde ik weten hoeveel procent van de aanvragen deze ‘ideale’ manier doorliepen. Initieel ging ik enthousiast aan de slag door alle mogelijke combinaties op te schrijven. Vrij snel kwam ik erachter dat dit onbegonnen werk was. In mijn Qlik script stonden 5.000 combinaties, terwijl het einde nog lang niet in zicht was.  Dit moest slimmer kunnen; een uitstapje naar een modeleer programma was nodig. Daarvoor heb ik R gebruikt.

Qlik Sense + R

Qlik is een snelle BI-tool voor het verwerken en visualiseren van data. Het is echter niet gemaakt om (simulatie) modellen in te bouwen. R is hier beter voor geschikt. Om alle mogelijke paden van ‘ontvangen’ naar ‘in beheer’ te berekenen, heb ik de ‘igraph’ package binnen R gebruikt. Hiermee kan een netwerk van nodes en paden worden gemodelleerd. Vervolgens kunnen er allerlei berekeningen op los worden gelaten; het snelste pad, het langste pad en dus ook alle mogelijke paden. De volgende afbeelding geeft weer hoe het netwerk van verschillende berichten in R gemodelleerd was.

Don’t work harder, work smarter!

Met het gemodelleerde netwerk, liet ik R alle mogelijke paden berekenen tussen punt ‘09’ en punt ‘-20’, dit waren er uiteindelijk meer dan 82.000. Hierbij liet ik het toe dat een lus maximaal 3 keer werd doorlopen. De mogelijkheden zouden exponentieel toenemen als ik meer herhalingen had toegevoegd.  Overigens kunt u in bijlage 2 het gehanteerde script vinden. De output van mijn R-model waren alle mogelijke paden van ‘ontvangen’ tot ‘in beheer’, deze gegevens kon ik weer met Qlik oppakken. De in een R gevonden mogelijke paden konden worden vergeleken met de daadwerkelijk verlopen paden van de aanvragen.

Resultaat

De resultaten vanuit mijn R-model gebruikte ik om vervolgens in Qlik de doorlopen paden van de aanvragen te duiden of deze ‘ideaal’ waren. De resultaten vielen ietwat tegen, slechts 1,5 procent van de geteste aanvragen hadden een ideale stroom doorlopen. In het gebruik van de statussen, wordt vaak afgeweken door een andere status te gebruiken of door de status herhalen. Daarnaast komt het ook voor dat statussen worden overgeslagen. Qua procesoptimalisatie naar de ‘ideale’ standaard zijn nog flink wat verbeterslagen te maken. Of de geschetste standaard is niet ideaal, het is maar net hoe je het bekijkt.

Los van deze analyse zijn er nog vele andere manieren hoe een netwerk kan worden geanalyseerd. Stel de kosten zijn bekend van iedere statusstap, wat zou dan een optimaal verloop zijn? Of wat dacht u van doorlooptijden als de tijd per stap wordt meegenomen? Er zijn mogelijkheden genoeg. Interesse voor een implementatie binnen uw organisatie? Stel gerust een vraag.

Bijlage 1: Het ideale verloop van statussen voor een hypotheekaanvraag

 

Zie ook: https://www.hdn.nl/statusmeldingen/

Don’t work harder, work smarter!

Bijlage 2: R-script

In deze bijlage is mijn R-script te vinden. In R-studio ziet het er als onderstaande afbeelding uit.

Don’t work harder, work smarter!

R Script:

require(“igraph”)
options(max.print=999999999)
g2 <- graph(edges=c(
’09’,’-14′, ’09’,’-24′, ’09’,’-10′, ‘-14′,’-14b’, ‘-14′,’-10′, ‘-14′,’-24′, ‘-14′,’-24b’, ‘-14b’,’-24′ ,’-14b’,’-24b’, ‘-14b’,’-10′ , ‘-24′,’-24b’, ‘-24′,’-10′, ‘-24′,’-14b’, ‘-24′,’-14′, ‘-24b’,’-10′, ‘-24b’ ,’-14b’, ‘-24b’,’-14′ , ‘-10′,’-14a’, ‘-10′,’-24a’, ‘-10′,’-12a’, ‘-10′,’-22′, ‘-10′,’-12′ , ‘-14a’,’-14d’ ,’-14a’,’-24a’, ‘-14a’,’-24d’, ‘-14a’,’-12a’, ‘-14a’,’-22′, ‘-14a’,’-12′, ‘-14d’,’-24a’, ‘-14d’,’-24d’  , ‘-14d’,’-12a’, ‘-14d’,’-22′, ‘-14d’,’-12′, ‘-24a’,’-24d’, ‘-24a’,’-14a’, ‘-24a’,’-14d’, ‘-24a’,’-12a’ , ‘-24a’,’-22′, ‘-24a’,’-12′  , ‘-24d’,’-14a’, ‘-24d’,’-14d’, ‘-24d’, ‘-12a’, ‘-24d’,’-22′, ‘-24d’,’-12′ , ‘-12a’,’-22′  , ‘-22′,’-12′  , ‘-12′,’-04′  , ‘-04′,’-23′, ‘-04′,’-23a’, ‘-04′,’-23b’, ‘-04′,’-12e’  , ‘-04′,’-12f’, ‘-04a’,’-23′, ‘-04a’,’-23a’, ‘-04a’,’-23b’, ‘-04a’,’-12e’, ‘-04a’,’-12f’, ‘-04b’,’-23′  , ‘-04b’,’-23a’, ‘-04b’,’-23b’, ‘-04b’,’-12e’, ‘-04b’,’-12f’, ‘-12e’,’-04a’, ‘-12e’,’-04b’, ‘-12f’,’-04a’  , ‘-12f’,’-04b’, ‘-23′,’-12b’, ‘-23′,’-12g’, ‘-23′,’-12e’, ‘-23′,’-12f’, ‘-23′,’-12c’, ‘-23′,’-05′, ‘-23a’  ,’-12b’, ‘-23a’,’-12g’, ‘-23a’,’-12e’, ‘-23a’,’-12f’, ‘-23a’,’-12c’, ‘-23a’,’-05′, ‘-23b’,’-12b’, ‘-23b’  ,’-12g’, ‘-23b’,’-12e’,’-23b’,’-12f’, ‘-23b’,’-12c’, ‘-23b’,’-05′, ‘-12b’,’-12e’, ‘-12b’,’-12f’, ‘-12b’  ,’-12c’, ‘-12b’,’-05′, ‘-12g’, ‘-12e’, ‘-12g’,’-12f’, ‘-12g’,’-12c’, ‘-12g’,’-05′, ‘-12c’,’-05′, ‘-05′  ,’-26′, ‘-26′,’-12d’, ‘-26′,’-20′, ‘-12d’,’-20′), directed=T)

plot(g2, layout=layout_with_kk, vertex.color=”green”)
0904 <- all_simple_paths(g2, ’09’, ‘-04’)  capture.output(0904, file = “041504.txt”, split = FALSE)
0420 <- all_simple_paths(g2, ‘-04’, ‘-20’) capture.output(0420, file = “0427.txt”, split = FALSE)

 

Door ‘require(“igraph”)’ laad ik het benodigde pakket in. Vervolgens bepaal ik de nodes en de richting van deze nodes met ‘graph(edges=c( ’09,-‘-14’,  ‘..’,’..’ … ), direct= T)’.  Let op, om de eerder in hoofdtekst besproken lussen te doorbreken, heb ik ingesteld dat iedere node maar één keer mag worden gepasseerd. Vervolgens heb ik voor de lussen die er waren extra nodes toegevoegd. Daardoor kan een lus ongeveer 3 keer plaatsvinden in plaats van onbeperkt. Met plot(..) functie wordt de model gevisualiseerd.

Nu het netwerk is gedefinieerd kan ik de benodigde berekeningen erop loslaten. Voor dit onderzoek ben ik enkel geïnteresseerd in alle mogelijke paden tussen twee nodes. Door ‘all_simple_paths(‘node1’, ‘node2’)’ kan dit worden opgevraagd. Vervolgens sla ik de resultaten op, deze gebruik ik later weer in Qlik.

Heb je vragen over deze methodiek, stel die gerust. Via de contactpagina kun je mij bereiken.

Sjoerd Meeuwsen

 

Sjoerd Meeuwsen

BI-consultant