beslutsoptimering

Beslutsoptimering – Det bortglömda superverktyget för kraftfull preskriptiv analys

Optimering ligger till grund för maskininlärning
Aspirerande Data Scientists blir ofta rådda till att först lära sig grunderna inom linjär algebra och statistik innan de ger sig på ämnen med en mer spännande namnsättning, såsom maskininlärning, djupinlärning, och allt däremellan. Vad som ofta glöms bort i dessa förvisso välmenande råd är optimering.

Optimering utgör en viktig pusselbit i all maskininlärning. Under motorhuven på i princip varje maskininlärningsmetod finns nämligen en optimeringsalgoritm som kalibrerar en eller flera parametrar genom att minimera en särskild kostnadsfunktion. Denna artikel går igenom de vanligaste maskininlärningsmetoderna och vilka optimeringsalgoritmer de grundar sig på.

Men optimering används inte bara som möjliggörare för maskininlärning, utan kan också användas för att lösa komplexa affärsproblem i sin egen rätt. För att skaka av mig alla konnotationer som begreppet optimering för med sig (till exempel de som jag just beskrev här ovan), kommer jag hädanefter referera till denna typ av tillämpad optimering för beslutsoptimering.

Beslutsoptimering modellerar och löser verklighetsnära affärsproblem
Beslutsoptimering används, enkelt uttryckt, för att hitta den optimala balansen mellan begränsade resurser och önskad affärsnytta. Till exempel kan beslutsoptimering hjälpa logistikchefen att hitta de optimala rutterna för sin fordonsflotta, med begränsade lastkapaciteter och tidsfönster, så att den totala körsträckan minimeras. Ett annat exempel är chefen på snabbmatsrestaurangen, som med hjälp av beslutsoptimering kan hitta den optimala skiftschemaläggningen som möter prognosticerad efterfrågan och minimerar onödig övertid.

Vid närmare eftertanke kan vi nog alla enas om att vi möter den här typen av frågeställningar i vår vardag (vi vill ju alla balansera vår tillgängliga tid mot de mål vi vill uppnå). Styrkan i just beslutsoptimering ligger i att den erbjuder oss ett systematiskt sätt att lösa optimeringsproblem i större skala och av en högre grad av komplexitet.

Att lösa ett beslutsoptimeringsproblem
När verkligheten ska modelleras med en beslutsoptimeringsmodell dröjer det inte länge förrän modellen blivit oöverblickbart komplex. Ta till exempel det välstuderade handelsresandeexemplet. I detta beslutsoptimeringsproblem ska vi finna den kortaste rutten för att besöka en uppsättning städer. Med bara 3 städer blir antalet möjliga rutter få – det finns bara en enda rutt (om man inte räknar med att man kan åka samma rutt baklänges). Med 4 städer blir antalet rutter 3 stycken. Med 10 städer blir antalet rutter 181 440 stycken. Den generella formeln för att hitta antalet möjliga rutter för n städer är (n-1)!/2. Problemets komplexitet växer alltså explosionsartat!  

Möjliga förbindelser mellan 10 noder.
Antalet möjliga rutter för att besöka alla noder en gång är 181 440 stycken.

Även för en superdator skulle det ta 800 miljoner år att utvärdera alla de drygt  möjliga rutterna i ett nätverk med bara 30 städer. Om man vill undvika den typen av tidshorisont har man alltså inget annat val än att lämna brute force-approachen bakom sig för mer sofistikerade beslutsoptimeringsmetoder.

Verktyg och program
För att lösa ett beslutsoptimeringsproblem behöver man en optimeringsmotor, eller solver engine som de ofta kallas för på engelska. Bland de mest välkända kommersiella motorerna (och därmed även de bästa) återfinner vi bland annat CPLEX, Gurobi och Mosek. Det finns olika sätt att prata med de här motorerna, till exempel via dedikerade optimeringsplattformar såsom GAMS Studio eller ILOG Studio.

Denna typ av dedikerade optimeringsplattformar fungerar förvisso bra när man vill lösa beslutsoptimeringsproblem av strategisk karaktär, men räcker inte lika långt när problembilden istället rör operationella beslut som man behöver fatta varje dag, timme eller kanske till och med sekund. För problem av operationell karaktär lämpar sig istället språk såsom C++, Java, och kanske i synnerhet, Python. I denna artikel ges en översikt över de Python-API:er som erbjuds för olika optimeringsmotorer.

Varför beslutsoptimering?
Varför behöver då din verksamhet beslutoptimering? Svaret på frågan är enkelt – det är med hjälp av beslutsoptimering som du genererar som mest värde från din mest värdefulla resurs: data.

Ofta grupperas dataanalys in i tre kategorier: deskriptiv, prediktiv och preskriptiv. Den deskriptiva analysen beskriver vad som har hänt historiskt och ger därmed både lägst nivå av insikt och lägst affärsvärde. Den prediktiva analysen prognosticerar framtida trender med hjälp av historiska mönster och bygger därmed vidare på den deskriptiva analysen. Prediktiv analys ger generellt både djupare insikt och ett större affärsvärde än den deskriptiva analysen.

Slutligen har vi den preskriptiva analysen, varunder beslutsoptimering insorteras, och det är också här vi ofta får de djupaste insikterna och uppnår det högsta affärsvärdet. Det är alltså den preskriptiva analysen som tar till vara på alla insikter som samlats under den deskriptiva och prediktiva fasen och översätter det till faktiska affärsbeslut.

Tveka inte på att höra av dig om du vill diskutera vidare kring beslutsoptimering eller annan typ av preskriptiv analys, skicka ett email till tilda.lundgren@advectas.se.

TildaLundgren

Tilda Lundgren
tilda.lundgren@advectas.se
Mitt namn är Tilda Lundgren, Data Scientist på Advectas. Jag är utbildad civilingenjör inom Industriell Ekonomi med inriktning på tillämpad matematik och optimeringslära. Tidigare har jag bland jobbat på Google, Jeppesen (Boeing) och Procter & Gamble. Här på Advectas specialiserar jag mig på Data Science-projekt inom beslutsoptimering och annan typ av preskriptiv analys. När jag inte löser optimeringsproblem tycker jag om att sjunga i kör, spela innebandy, eller svettas i löparspåret. Göteborgare i exil, nu bosatt i Hammarbyhöjden strax söder om Stockholm.

Alla inlägg av Tilda Lundgren

Så lyckas ni med er Self Service BI-resa

Läs broschyren här.