Performance Analysis of a Uniform Allowance Investment Strategy with Gearing and Interest on OSEBX Returns using Bootstrap Simulation in R

As interest rates continues to drop we are seeing a flood of available cheap debt. This paper explores if investing in equity using ambitious gearing can be a worth while endeavor in order to take advantage of the available liquidity. Between start of January 2010 and end of June 2016 the Oslo Stock Exchange Benchmark Index (OSEBX) has increased by 58.6%, at an annualized rate of return of 7.4%. At the same time we’re seeing gearing opportunities with as low as 2% interest rate. Does the cheap debt offset the risk of gearing up?

Warning: The following analysis is only provided as an academic analysis, and should not be construed as financial advice in any way. As always, past performance does not guarantee future results.

This paper concludes that there is indeed increased profitability from low interest rates, and that lower interest rates improve risk adjusted returns (Sharpe Ratio). However, even at 1% interest rate it does not beat the risk adjusted return of the non-gearing scenario. It makes intuitive sense that lower interest rates make geared investment’s risk adjusted return approach but not exceed the non-geared investment’s risk adjusted return. It implies that gearing simply increases return at the expense of risk, while you incur a liquidity cost (interest) which makes it less preferable from a risk neutral perspective.

Methodology and Setup

As part of this analysis an R script was developed. In addition to the underlying instrument price history, the script takes the following inputs: Annualized interest rate, monthly allowance, gearing factor, sampling period, investment period, confidence level, and simulation count. It then simulates market conditions using bootstrapping in order to output prediction bands (i.e., intervals) and a probability of margin call. The simulation period and the sampling period are decoupled. Meaning the period we draw simulated returns from doesn’t have to be the same period we run the simulation on. Interest costs are accrued at the end of the month, while allowances are released at the beginning of the month and immediately invested with gearing.

For our analysis we will run the simulation over a period of two years, between July 2014 and June 2016, while sampling OSEBX returns for 16.5 years, from January 2000 to June 2016. Daily price data is extracted from Netfonds. In case that service goes down, a data dump can be found here. The monthly allowance is set to NOK 20,000. Bootstraping simulation is done 10000 times, and we use a prediction interval of 90%. This last part means that we would expect returns to fall within the created prediction bands 90% of the time. An expected median return is also measured. The remaining input parameters, i.e., gearing factor and interest rate, will be governed by the five scenarios under study:

ID Description Details
HxLi High Gearing,
Low Interest Rate
2.0x gearing factor with
2.0% annual interest rate.
HxHi High Gearing,
High Interest Rate
2.0x gearing factor with
6.0% annual interest rate.
LxLi Low Gearing,
Low Interest Rate
0.5x gearing factor with
2.0% annual interest rate.
LxHi Low Gearing,
High Interest Rate
0.5x gearing factor with
6.0% annual interest rate.
Nx No Gearing 0.0x gearing factor with
arbitrary interest rate.

The primary study case is the HxLi (i.e., High Gearing, Low Interest Rate) scenario, where we have a gearing factor of 2.0x and an annual interest rate of 2.0%.

In addition to these scenarios we’ll look at a special stress test case, lets call it the HxLiC scenario, where we both sample and simulate on data from the Financial Crisis of 2007–09 using the standard HxLi scenario. We’re measuring this period over two years, from July 2007 to June 2009. For comparison, let’s also include a scenario NxC where we don’t gear during the Financial Crisis.

After imputation of missing values the the price dataset used for sampling daily returns has 6026 observations. Imputation (e.g., filling inn blank data) is done by using the previous days prices. Margin Call is determined if the loaned amount exceeded the current asset balance. In order to account for margin call during a particular day, the low price of a day is used to determine the asset balance. That said, the close price is used to calculate the rate of return if margin call isn’t done on a particular day. At a margin call event all assets are liquidated and loans repayed to the fulles extent. Investments resume the next month when a new allowance is issued. Gearing also continues if the scenario warrants it.

Results and Findings

For sake of brevity we will not explore every aspect of the generated data. We’ll focus the HxLi case and see how it compares to other alternative scenarios. For completeness sake all generated charts can be found here:

Change in Gearing Factor

First lets look at how accumulation of allowances (investments) look without gearing and with high gearing (2x).

Use the slider to compare the left (no gearing) and right (2x gearing) graph. What we are looking at here is the increase in assets over time. The red line is the original allowance of NOK 20 000 given each month in aggregate. Performance above this line produce profits. The expected (i.e., median) line is teal colored and marked as “Asset Mid (50%)”. We expect the assets to fall 50% of the time above and under this line. Between the remaining upper and lower lines encloses an area we can expect the assets to fall within 90% of the time. This means that 5% of the time the asset level will go above the upper line, and 5% of the time it will fall below the lower line. Thus we are looking at a 90% prediction band (i.e., series of intervals) generated from the 10 000 simulations. Sometimes people mistakenly call these confidence intervals or bands, but that’s something related but different.

It is clear that we see a enormousness change in possible outcomes when we gear up. Because the balance itself might occlude the performance lets look at the same scenarios, but only looking at profits.

Notice that we’ve changed the red line to mean the actual performance during the selected period. It shows what you would actually have gotten in profit if you traveled back in time and applied the strategy on real data.

During the two year period we have invested NOK 480 000. If we do not gear up we see (from the tables in the appendix and the graph above) that the 5% Value at Risk (VaR) downside is NOK 106849. This means we expect our losses to never exceed NOK 106849 more often than 5% of the time. If we gear up 2x then things change dramatically. The 5% VaR then produces a NOK 355 164 possible downside. That said our upside also changes from an expected profit of NOK 39970 without gearing to a profit of NOK 102411 with 2x gearing.

In absolute terms these numbers might be hard to interpret, so lets look at them from a percentage point of view.

Here we see that 2x gearing gives a 5% VaR downside of -73.99% (-49% annualized) and expected return of 21.34% (10.15% annualized). No gearing gives a 5% VaR downside of -22.26% (-11.83% annualized) and an expected return of 8.33% (4.08% annualized). This looks like dire odds, but keep in mind the 5% upside. You are just as likely to get a 154.15% (59.42% annualized) upside as the -73.99% (-49% annualized) downside.

Finally we should mention the probability of getting a margin call during the period. Without gearing it’s naturally a likelihood of 0% to get a margin call, but with 2x gearing this spikes to 5.87%. If you have a gearing of 0.5x this falls down to about 0% again.

Change in Interest Rate

Now that we’ve looked at how gearing affects the investment we should explore what impact a higher interest rate has on gearing. The analysis from the previous section used a low interest rate of 2%, here we will pump it up to 6%.

Looking closely on the above graph, and sliding back and forth, you can barely see a change. But there is one. The expected return goes from 21.34% (10.15% annualized) to 12.46% (6.05% annualized). That’s a 4.1 percentage point drop in annualized returns. In cash terms it’s goes from an expected profit of NOK 102411 to only NOK 59823 over the two years. You can see it more closely if we bring up the profit charts:

As we can see you do lose some money from a higher interest rate. But is it an argument for gearing up? Well, ultimately the money lost in interest seems to be trivial to the increase in risk. In the grand scheme of things you can see the increase relative to the asset holdings:

Let’s look closer at the alternatives in terms of risk adjusted return. The following table shows the Sharpe ratio over the two year period.

Measure Nx LxLi LxHi HxLi HxHi
Standard Deviation 22.77% 34.91% 34.39% 69.90% 69.10%
Risk Free Return 1.00% 1.00% 1.00% 1.00% 1.00%
Return 8.33% 10.88% 9.17% 21.34% 12.46%
Risk Adjusted Return 0.32 0.28 0.24 0.29 0.17

The annual risk free asset is set to about 0.5% or about 1.0% biannually. This is inspired by the current 3 year Norwegian government bond. Here we see that the risk adjusted return for the non-gearing scenario is preferred. However, we should notice that a low interest rate definitely makes gearing more attractive. When we go from the HxHi scenario (6% interest rate) to the HxLi scenario (2% interest rate) the risk adjusted return gos from 0.17 to 0.29, not far from the non-gearing (Nx) scenario of 0.32. Because this is so close, we’ll add a last scenario HxTi: High gearing (2x) and a tiny interest rate of 1%.

The HxTi scenario produced a expected return of 22.69% and standard deviation of 69.46% thus the risk adjusted return is 0.312 just under the non-gearing scenario (Nx). Thus in general it does not seem that gearing is preferable given a risk neutral outlook.

Stress Testing Using Data From the Financial Crisis

Now that we’ve explored how gearing and interest rate affects our investment, let’s do some stress tests. The previous analysis was done through sampling of data throughout the last 16.5 years. This means our simulations reflect a typical year. What if we did our gearing during the financial crisis? The following stress test uses data from only during the financial crisis.

Let first look at the difference between the two sampling periods. The following compares a typical year versus a financial crisis year – both without gearing.

This looks pretty bad. On the left you see the typical case, while the right shows the stress test case. Typically you’d expect a return of 8.33% (4.08% annualized), but during the financial crisis you’d rather expect a -23.54% (-12.56% annualized) return. Note that we’re not talking about a 5% VaR here, mathematically speaking we’re talking about the 50% VaR. The 5% VaR says that you 1 out 20 times will get a return worse than -54.63% (-32.64% annualized) during the financial crisis, as opposed to the typical case of -22.26% (11.83% annualized). To make this more tangible lets look at the asset build-up, or rather tear-down:

It’s safe to say that this period of time was disastrous, even without gearing. What if we were 2x geared?

On the left you see the typical development with 2x gearing, while the right shows 2x gearing during the financial crisis. The red line shows actual development during the time, if you had employed the gearing strategy. Notice that real data actually wipes you out with a margin call. It might be reasonable to look closer at the margin call probabilities later. In any case, the 5% VaR is a whopping -102.73% for the two years. It’s actually not mathematically possible to calculate an annualized version. But you can see it lies at 100% loss from the 6th month on. You actually owe money after getting wiped out. This is due to the margin being call at the worst price of the day.

Let look at the asset balance to get it more tangible.

This doesn’t look good. Expected losses for the two years is NOK 350812 during the financial crisis, as opposed to an expected profit of NOK 102411 during normal times. In relative terms this is an expected loss of -73.09% (48.13% annualized) versus an expected profit of 21.34% (10.15% annualized), respectively.

Probability of Margin Call

The likelihood of getting a margin call during the simulated scenarios is generally pretty low, close to zero, except for when you’re highly geared or during a recession. The probability of margin call is 5.87% during the HxLi scenario where we have high gearing (2x) and low interest rate (2%). It goes up to 8.40% for the HxHi scenario where we have a higher interest rate (6%). During the financial crisis with 2x gearing the probability of margin call is 78.87%. In practice you might even get multiple margin calls if you continue to gear 2x after being wiped out.

These numbers aren’t annualized, and can’t be easily annualized without changing the code. Thus future work includes measuring probability of margin call for particular periods of the simulation, say every year.



Long Term

Measure Nx LxLi LxHi HxLi HxHi
Days 731 731 731 731 731
Gearing Factor 0.0x 0.5x 0.5x 2.0x 2.0x
Interest Rate 2.00% 2.00% 6.00% 2.00% 6.00%
Prob. of Margin Call 0.00% 0.00% 0.00% 5.87% 8.40%
Cum. Return
Standard Deviation
22.77% 34.91% 34.39% 69.90% 69.10%
Cum. Return
Lower (5%)
-22.26% -34.13% -36.00% -73.99% -82.04%
Cum. Return
Mid/Expected (50%)
8.33% 10.88% 9.17% 21.34% 12.46%
Cum. Return
Upper (95%)
51.37% 78.21% 76.13% 154.15% 145.27%
Sharp Ratio 0.0200 0.0202 0.0199 0.0205 0.0205
Cum. Profit
Standard Deviation
109305 167585 165072 335517 331679
Cum. Profit
Lower (5%)
-106849 -163831 -172778 -355164 -393784
Cum. Profit
Mid/Expected (50%)
39970 52213 44013 102411 59823
Cum. Profit
Upper (95%)
246593 375414 365438 739902 697298
Acc. Allowance 480000 480000 480000 480000 480000

Crash Stress Test

Measure Nx HxLi NxC HxLiC
Days 731 731 731 731
Gearing Factor 0.0x 2.0x 0.0x 2.0x
Interest Rate 2.00% 2.00% 2.00% 2.00%
Prob. of Margin Call 0.00% 5.87% 0.00% 78.87%
Cum. Return
Standard Deviation
22.77% 69.90% 28.91% 66.57%
Cum. Return
Lower (5%)
-22.26% -73.99% -54.63% -102.73%
Cum. Return
Mid/Expected (50%)
8.33% 21.34% -23.54% -73.09%
Cum. Return
Upper (95%)
51.37% 154.15% 36.09% 84.30%
Sharp Ratio 0.0200 0.0205 -0.0255 -0.0259
Cum. Profit
Standard Deviation
109305 335517 138783 319555
Cum. Profit
Lower (5%)
-106849 -355164 -262248 -493121
Cum. Profit
Mid/Expected (50%)
39970 102411 -112982 -350812
Cum. Profit
Upper (95%)
246593 739902 173210 404619
Acc. Allowance 480000 480000 480000 480000


All generated charts can be found here:

Source Code

The author and copyright holder of the following source code is André Christoffer Andersen. The source code is provided under the following Creative Commons license: Attribution-NonCommercial-ShareAlike 4.0 International. Please contact the author for commercial use.

Use at own risk.

Scenario file: scenarios.csv
Data file: osebx.csv (mirror)
Output charts:
Output text dump: run_dump.txt

Practical Feature Reduction Using SVD in R

I’m refreshing my data mining skills and thought it could be fun to do the Digit Recognizer competition over at Kaggle. Each datapoint in that dataset is an image of a hand drawn digit from zero to nine. Our task is to determine which digit each of them represent. The problem is that each pixel represents a feature making it a huge number of them. Machine learning algorithms really don’t like large feature spaces due to the risk of overfitting. I was going to apply some sort of feature reduction technique, and I remembered SVD being awesome for this type of jobs.

To my surprise the resources I found online didn’t really bring the task down to earth. I spent some time to “get it” again and thought it could be a worthy blog post. Remember, this isn’t meant to be rigorous in any way. It’s just an attempt at making a practical example. If you’re interested in understanding how SVD works I’d suggest any of the other brilliant resources out there.

I’ll be assuming some familiarity with matrix notation and R code. If you need a brush up on matrix notation I’ve written a post about it before.

Alright, lets get started. We’ve got a dataset \(X \in \mathbb{R}^{m\times n}\) and labels \(\vec{y} \in \{0,1,…,9\}^{m}\) where \(m\) is the number of datapoints and \(n\) is the number of features. The datapoints are typically denoted as lower case \(\vec{x} \in \mathbb{R}^{n}\). For the database nuts, you can think of \(X\) as a table of \(m\) rows and \(n\) features where \(\vec{x}\) is a row. Each datapoint \(\vec{x}\) has a corresponding label \(y\) taking a value 0 to 9. These values can be found in \(\vec{y}\). What we want to do is to make a good classifier \(f\) which learns the patterns of \(X\) such that when we give it a new datapoint \(\vec{z} \in \mathbb{R}^{n}\) with unknown label we can estimated (i.e., guess) the value \(\hat{y} \in \{0,1,…,9\}\).

What we’ve got then is a classifier which does the following:

\(f(\vec{z}; X) = \hat{y}\)

Problem: There are too many features. We need to reduce \(n\) somehow. Singular value decomposition (SVD) can help us out. You can think of what it does as transforming the features of our datapoints into a new feature set with increasing importance. This last point is important because it means we can truncate the less important features. Actually this is how many lossy image compression algorithms work since you are removing data, while retaining as much of the information as possible. What you get from performing SVD on your dataset is two matrices \(U \in \mathbb{R}^{m\times n}\) and \(V \in \mathbb{R}^{n\times n}\) in addition to a vector \(\vec{d} \in \mathbb{R}^{n}\). Typically this last vector gets represented as a diagonal matrix \(D = \mathrm{diag}(\vec{d}) \in \mathbb{R}^{n\times n}\), meaning each element of \(\vec{d}\) is in the top-left to bottom-right diagonal of \(D\) and the rest of the entries are zero. These three matrices can losslessly be reverted to your initial dataset \(X\) using the following relationship:

\(X = UDV^\mathrm{T}\).

What is cool about this is that we can remove columns from the right of \(U\) and \(V\), as well as the bottom-right column-row pairs of \(D\), and still maintain a good approximation of \(X\). One important caveat: \(X\) must be centered. The average of each feature must be zero. You do this by subtracting the average feature value from each respective element of each datapoint. I’m not going to represent this in matrix notation, but you can see how to go about doing this in the R code further below.

X = UDV'

Image is a modified version of one found at

In the above image, the gray part is what we retain. Also, don’t get confused, the \(V\) is transposed thus the part which is retained looks like a rows in the image.

Alright, let’s give these smaller matrices names:

\(\hat{X} = U_rD_rV_r^\mathrm{T}\)

Here \(\hat{X} \in \mathbb{R}^{m\times n}\) is an approximate version of our original dataset \(X\), while the subscript \(r\) indicates that the matrix has “reduced” size as described above. What we got now is \(U_r \in \mathbb{R}^{m\times k}\), \(D_r = \mathrm{diag}(d) \in \mathbb{R}^{k\times k}\) and \(V_r \in \mathbb{R}^{k\times n}\) where \(k \in \{1,\dots,n\}\), i.e., we are planning to retaining \(k\) features from the original \(n\) features.

Alright, all of this seem fine and dandy, but where is the new dataset we are going plug into our classifier. I asked myself the same question. Without fail, every post I found skipped this part, until I found this answer at The answer is to use the \(U_rD_r\), called the principle components or “score”. What we end up with is

\(X_r = U_rD_r\)

Again, I use the subscript \(r\) to indicate a “reduced” matrix, in this case we now have \(X_r \in \mathbb{R}^{m\times k}\). That’s it! Case closed? No, not entirely. The following won’t work:

\(f(\vec{z}; X_r) = \hat{y}\)

This is because your unlabeled \(\vec{z} \in \mathbb{R}^{n}\) must have the same number of features as \(X_r\). It very much doesn’t. \(X_r\) has \(k\) features, while our unlabeled datapoint \(\vec{z}\) still has \(n\) features. We need to transform the unlabeled datapoints we want to classify. Let’s say we have a a bunch (\(l\)) of unlabeled datapoints in a dataset \(Z \in \mathbb{R}^{l\times n}\) then we can transform it using the \(V_r\) matrix as follows:

\(Z_r = ZV_r\)

If you’r streaming datapoints and need to do predictions one-by-one you can do the same as follows

\(z_r^\mathrm{T} = z^\mathrm{T}V_r\)

or the equivalent

\(z_r = V_r^\mathrm{T}z\)

Thus, we have what we need to do predictions with the feature reduced dataset:

\(f(\vec{z}_r; X_r) = \hat{y}\)

I did say we were doing this in R, and I’ll stick to this promise. The following outlines how to do it on dummy data.

Later I will follow up with a post on how to do it using the Digit Recognizer dataset from Kaggle.

Hvorfor jobbe i Affecto?

Ble intervjuet om hvordan det er å jobbe hos Affecto.
Her følger svarene mine.

André Andersen – BI-konsulent og tidligere TRP-er

André Andersen bor i Oslo, er 29 år og jobber som Business Intelligence Konsulent i Affecto. Han er èn av mange nyansatte som har deltatt i Talent Recruitment Program .

Navn: André Andersen
Alder: 29
Jobber som: Business Intelligence konsulent

Det beste med jobben: – Å kombinere “tech” og “business”. Det passer veldig bra med min utdanning og mine interesser.

Andre har en solid utdannelse og har etter at han begynte i Affecto deltatt i talentutviklingsprogrammet (TRP) vårt for nyutdannede ansatte.

Hva slags utdannelse har du?

Jeg tok en femårig i industriell økonomi og teknologiledelse på NTNU. Hovedprofilen min var anvendt økonomi og optimering, og teknologifordypningen min var datateknikk og intelligente systemer. I fjerde klasse på Indøk studerte jeg ved UCSD i USA, og før NTNU studerte jeg en treårig bachelor i matematikk, informatikk og teknologi på UiO.

Hovedoppgaven min på Indøk handlet om automatisert aksjehandel ved hjelp av porteføljeoptimering, maskinlæring og evolusjonære algoritmer.

Hva gjorde at du valgte Affectos TRP program og hvordan opplevde du programmet?

Fra studietiden har jeg bygget en sterk interesse for intelligente systemer. I forretningsverdenen betyr det i praksis dataanalyse og data mining. Jeg så på det å jobbe hos Affecto som en gylden anledning til å komme nærmere på mye interessante data og kunne arbeide med praktiske utfordringer rundt datadrevet beslutningsstøtte. Affecto hadde også profilen jeg så etter i en arbeidsplass: Flat struktur, kunnskapsrikt og hyggelig miljø, villig til å prøve nye ting, fostring av engasjement, mange forskjellige kunder, relevant kursing, verdifull oppfølging, og mye mer.

TRP-programmet var et spesielt bra initiativ da det baserer seg på en fin miks mellom å lære kunsten å være en god konsulent, og passe på at man har grunnlaget man trenger både fagmessig og teknologisk. Man blir på ingen måte kastet ut på dypenden. Gjennom TRP og mentorordningen blir man gradvis forberedt og hjulpet på vei til å bli del av forretningsverden. Man blir utrustet med en verktøykasse og et nettverk som gjør én forberedt til å møte sin første kunde med riktig tyngde og støtte.

Hva innebærer det du jobber med og kan du gi noen eksempler??

Fagfeltet til Affecto som helhet heter Business Intelligence (BI). Her er målet å forvandle bedrifters rådata til nyttig informasjon og forretningsinnsikt. Bedrifter produserer fantastisk store mengder data, men uten riktig behandling skaper disse liten verdi, og kan faktisk koste mer enn nytten.

Jeg jobber i Insight & Integration-avdeling til Affecto. Her jobber vi i kjernen av problemdomenet til BI. Siden jeg startet i Affecto for litt over et år siden har jeg fått deltatt på utrolig mye givende arbeid. Jeg har arbeidet med prosjektplanlegging og -estimering, anbuds- og innsalgsarbeid, produkt- og løsningspresentasjoner, utvikling av løsninger i ett flust av verktøy – dette gjelder både “proof of concepts” og faktisk produksjonssystemer.
Videre har jeg stått for dokumentering av egne løsninger og eksterne løsninger, deltatt på kurs, holdt kurs, og holdt webinar. Jeg har også fått reist en del; spesielt til våre naboland gjennom TRP-ordningen, sørover til varmere strøk for kick-off, og nordover til en av våre kunder der.

Hvordan så forrige arbeidsuke ut for deg?

Mandag til onsdag jobbet jeg sammen med datavarehusavdelingen til hovedkunden min, en forretningsbank. Her jobbet jeg med en teknisk oppgave hvor jeg laget dataflyter for å sammenstille endringer på lånekontrakter fra flere kildesystem. Dette er hva man kaller dataintegrering, og handler om å gjøre data tilgjengelig for videre analyse.

Etter lunch på onsdag, dro jeg til min tidligere hovedkunde, en offentlig institusjon, her hadde vi akseptansemøte hvor vi gikk gjennom løsningen jeg produksjonssatte uken før – et system for prognoseføring og rapportering av interne og eksterne kostnader. Løsningen ble akseptert med kun ønske om kosmetiske forbedringer.

På torsdagen til fredag var jeg hos “forretning” hos min nåværende hovedkunden. Her gjorde vi analyse av forretningskrav, og jeg startet med å sette meg inn i logikken i eksisterende løsning som var implementert i et for meg nytt analyseverktøy. Målet er å konkretisere en midlertidige løsning for risikovurdering av lånekunder og gjøre den klar for generell bruk. Ellers, på fredag brukte jeg litt tid til å hjelpe HR med å forberede bedriftspresentasjon på NTNU.

Hva synes du er spennende og utfordrende med din jobb?

I alle oppdragene jeg har deltatt i har jeg arbeidet tett med forretning. Å avdekke behov, artikulere dem, estimere arbeidsmengde, og bygge forventninger står veldig sentralt. Dette er en givende prosess da man deltar både i defineringen av hva som skal lages og så få se disse tankene konkretisert og brukt i praksis.

Man skal kunne både beherske “tech” og “business” noe som passer veldig bra med min utdanning og mine interesser. Som konsulent i Affecto er det forventet at man skal ha et bredt forhold til teknologi. Det er fint om man er gode på spesifikke verktøy, og etterhvert vil man selvsagt tendere mot noen verktøy mer enn andre, men det er et mål i seg selv å ha en holdning om å være verktøy-agnostisk.

Man er først og fremst førsteklasses konsulenter med medmenneskelige og analytiske evner, dernest fagfolk med konkrete verktøyerfaring. Dette gjør at man skal stadig være forberedt på å ta på seg nye utfordringer og være åpen for å raskt kunne sette seg inn i nye problemstillinger og teknologier. For meg ligger de mest spennende utfordringene i grensesnittet mellom forretning og teknologi; et område hvor Affecto har sin hovedgeskjeft.

Ser du noen trender innen ditt område?

Innen mitt område er den største trenden jeg ser at bedrifter stadig går fra å se på IT-investeringer som en ren kostnad til å se på det som en mulig inntektskilde. Det å kunne love bort bedre bunnlinje gjennom f.eks. økt omsetning, fremfor lavere IT-kostnader, gjør at forretning blir drivkraften til ønske om IT-investeringer fremfor IT-avdelingen selv. Og er det en ting som er fellesnevneren for vellykkede løsninger så er det støtte fra forretning.

Det som driver dette skiftet er tilgjengeligheten av moderne analyseverktøy og økt kunnskap innen dataanalyse. Gjennom data mining-metoder, som prediktiv analyse på kundedata, starter bedrifter nå å ta i bruk tilpassede system for semi- og helautomatisert beslutningsstøtte. Eksempel på dette er system som automatisk godkjenner lån, eller system som automatisk anbefaler kunden produkt basert på deres egne og andres preferanser, eller system som automatisk varsler en kundebehandler om misfornøyde kunder gjennom tekstlig sentimentanalyse.

Verktøy som Tableau har gjort utforsking og visualisering av data nærmest til en lek, gøy som en lek i alle fall. Man kan nå sitte sammen med forretning og se på dataene, og gjøre oppdateringer like fort som man kommer på muligheten: “Analytics at the speed of thought.”

Juleøltesten 2014

Resultatene – kort og godt

Tradisjonen tro er årets juleøltest gjennomført, og analyseresultatene er kommet inn. For de utålmodige kan vi annonsere med en gang at Nøgene Ø kom på topp i år også. Nøgene Øs God Jul og Underlig Jul troner på henholdsvis første og andre plass, med Kinn Julefred på en hårfin tredjeplass. Verst ut kom Tuborg Julebrygg, som med et “uhell” kom med i rangeringen. Den har visstnok fått “brygge” nederst i kjøleskapet siden juleøltesten 2012.

Resultatoversikt for juleøltesten 2014.

Resultatoversikt for juleøltesten 2014. Justerte poengsummer gjør at total kan avvike.

Vinnernes bryggerier skal selv få beskrive ølen sin:

Førsteplass: Nøgene Ø God Jul. A dark ale brewed specially for the Christmas season, with a rich, complex taste of caramel. This is a strong, dark and rather sweet Christmas Beer – just the way we think a Christmas beer should be.

Andreplass: Nøgene Ø Underlig Jul. The name of this beer is “Peculiar Christmas” in english. This spiced Christmas ale is strange – and indeed a fusion beer. We have gathered inspiration from the Norwegian drink “gløgg”, and as such this is quite an uncompromising brew.

Tredjeplass: Kinn Julefred. I meir enn 1000 år har nordmenn bryggja øl til jul. Juleølet var festdrikk og sterkare enn ølet ein drakk ellers i året. Vårt juleøl er bryggja i denne tradisjonen og er eit fyldig og kraftig øl med god maltsmak. Julefred er bryggja spesielt med tanke på den tradisjonelle salta og tørka julematen, men høver og godt som sjelevarmar for ein frosen skrott.

Ønsker å takke verten og vertinnen, Helge og Marit, for deres innsats i å arrangere juleølsmaking atter et år. Det er ikke julestemning før smaksløkene bikker over, og skriker etter andre sanseinntrykk enn bekmørkt og overkrydret juleøl. Spesielt ønsker vi i juryen å takke vertinnen for hennes gjestmildhet og innsats som bartender, eller kanskje forskerspire(?), da juryens forhold til henne er nærmere den mellom forsøkskaniner og mad scientist.

Dem som ønsker et nærmere innblikk i hvordan vi kom fram til resultatene og er nysgjerrige på hva annet dataen kan fortelle om juleøla, og kanskje litt om jurymedlemmene selv, inviteres til å fortsette å lese.

Analysen – et dypdykk i ølla

Sist år ble analysen gjort i Excel, og resultatet finner du her. I år går vi grundigere og mer systematisk til verks. Vi har fått tak i en lisens til analyseverktøyet Tableau, noe som gjør dataanalyse til en lek.

Årets jury består av Helge Svendsen, Stian Skår (Krystad), Nikolai Skogstad, og André Andersen. Helge fronter instagramkontoen 365wines om vinkunsten, noe som muligens har farget vår tilnærming til juleøltestingen. Spesielt gjelder det poengsystemet vi har brukt som er basert på Robert Parkers poengsystem for vin. Poengsystemet har følgende delresultat:

  • Farge (med skum/head) gir opp til 5 poeng
  • Lukt gir opp til 15 poeng
  • Smak gir opp til 20 poeng
  • Helhet gir opp til 10 poeng

Poengene fra delresultatene pluss 50 grunnpoeng legges sammen og gir en skala fra 50 til 100 poeng. Dette følger det underliggende karaktersystemet i Amerikanske akademia.

Standardisering av poengene

Vi har digitalisert poengene og kan derfor gjøre en god del artig analyse. Først anerkjenner vi at minst to av oss ikke vet hva vi driver på med når det gjelder øltesting, og at poenggivingen spriker en god del. Dette har vi tatt hånd om ved å standardisere resultatene slik at jurymedlemmene har samme snitt og standardavvik. Dette er en fancy måte å si at vi får poengene til å kunne bedre sammenliknes. Hvis noen (*host* Nikolai) gir veldig sprikende og lave resultater blir de automatisk gjort mer konsentrert og hevet litt for å likne mer fellesresultatet. Både rådataen og de standardiserte resultatene finner du her. Delpoengene og endelig poengsum har blitt standardisert hver for seg, noe som gjør at endelig totalsum ikke nødvendigvis går opp.

Deskriptiv statistikk over jurymedlemmenes poenggivning.

Deskriptiv statistikk over jurymedlemmenes poenggivning.

Fra første tabellen over ser vi at rådataen til Helge og Stian begge har rimelig like standardavvik og gjennomsnitt, i motsetning til Nikolai og mine egen standardavvik som er ganske brede. Vi to har også henholdsvis ganske lav og høy gjennomsnitt. Det er kanskje ikke så rart at vi to virker mer urutinert i stemmegivningen i forhold til Helge som har erfaring innen vinkunsten og Stian som brygger eget øl. Pytt, pytt, vi gyver løs på oppgaven med hodet hevet likevel, og kompenserer våre mangler med å tvinge stemmene våre til å ha samme standardavvik og gjennomsnitt som de med peiling. Dette påvirker ikke Helge og Stians resultater så mye, men Nikolais og mine egne resultat blir normalisert.

Etter standardiseringen har vi følgende poengfordeling på sluttresultatene:

Fordeling av endelige poeng.

Fordeling av endelige poeng.

I all hovedsak gis det ikke mange poeng mellom 95 og 100, og vi virker svært så glad i å gi rundt 85 poeng. Fordelingen ser ikke akkurat ut som antatt normalfordeling, men det får være grenser på hvor statistisk korrekt vi skal være i en uformell juleøltest.

Poengfordelingen på hver av deltestene oppfører seg litt mer som forventet:

Fordeling av delpoeng.

Fordeling av delpoeng.

Her ser vi kanskje en tendens til normalfordeling. Siden vi summerer normalfordelinger er det å forvente at endelig poengsum bør være normalfordelt også, men akk nei; dette gjelder kun uavhengige normalfordelte variable, og senere vil vi se at dette på ingen måte er tilfellet. Lukter en øl godt er det stor sannsynlighet for at den også smaker godt. Mer om det senere.

Kanskje mest for jurymedlemmenes del så er de standardiserte poengsummene vi ga som følger:

Jurymedlemmenes poenggivning.

Jurymedlemmenes poenggivning.

Beste fem øl innen farge, duft, smak og helhet.

Så hvem er vinnerene av deltestene? Her følger topp fem for hver deltest:

Beste fem øl innen farge, duft, smak og helhet.

Beste fem øl innen farge, duft, smak og helhet.

Har du tenkt å drikke øl med kun ganen så ser det ut til at Kinn Julefred går av som vinner, ellers troner Nøgene Øs øl på topp også på deltestene.

Korrelasjonene – fra farge og duft til smak

Oppdelingen i flere deltester gjør at vi kan se nærmere på hva som muligens påvirker smaken og helhetsinntrykket. Følgende viser korrelasjoner; farge og duft versus duft, smak og helhet.

Scatter-plot mellom delpoengene.

Scatter-plot mellom delpoengene.

Det ser ut til å være en positiv korrelasjon mellom delpoengsummene. Tableau rapporterer at samtlige trendlinjer har p-verdi på lavere enn 0.0001, men følgende R-squared.

X-aksen Y-aksen R-squared p-verdi
Farge Helhet 0,216341 < 0.0001
Farge Smak 0,220991 < 0.0001
Farge Duft 0,236277 < 0.0001
Duft Helhet 0,615605 < 0.0001
Duft Smak 0,580103 < 0.0001
Duft Duft 1 < 0.0001

Poenggivningen ble gjort på en slik måte at vi ga delpoeng før vi gikk videre til neste deltest. Altså, fikk farge poeng før duft, og duft før smak og helhet. Dette kan gi støtte til at det er snakk om kausalitet og ikke bare korrelasjon i tallene. Det virker som at vi faktisk synes at øl som ser bra ut også lukter bra, og øl som lukter bra også smaker bra. Akkurat hvorfor skal jeg ikke begi meg innpå, annet enn at det kan være en slags anchoring effekt og/eller ønske om å være konsistent med tidligere poenggivning. Selvsagt, det kan jo også være at vi er superflinke til å tyde ølens kvaliteter fra utseende, men jeg tviler.

Svik og lureri

Hva skjer når eksperimentøren finner ut av å servere samme øl flere ganger? Og ikke minst samme øl rett etter hverandre? Tredjeplassen, Kinn Julefred, ble servert som nummer 4 og 10, samt Delirium Christmas som nummer 14 og 15, altså rett etter hverandre.

Servering av samme øl flere ganger.

Servering av samme øl flere ganger.

For Kinn Julefred var dens andre mottakelse svært så mørk; den gikk tilbake 10 poeng. Kun undertegnede valgte å ikke gi nevneverdig mindre poeng, mens største tilbakefallet fra et jurymedlem var på hele 20 poeng, eller 2.5 standardavvik lavere. Dette tilsvarer å gå fra å ha ei topp 1% øl til å ei som er nøyaktig midt på treet. For Delirium Christmas var tilbakefallet ikke så ille. De fleste jurymedlemmene sto på stedet hvil; tilbakefallet var på kun 3 poeng.

Betydningen av land og gjæringsprosess

I utgangspunktet forventet vi ikke mye forskjell mellom landene. Men la følgende illustrasjon synke inn.

Box-and-whiskers-plot av endelig poengsum mot varegruppe og land.

Box-and-whiskers-plot av endelig poengsum mot varegruppe og land.

Av en eller annen grunn kom dansk øl veldig dårlig ut. Mulig det er tilgjengelighet og seleksjonsbias. Sveriges resultat bør vi også ta med en klype salt, da de ikke har mange datapunkt. Muligens bare ei øl.

Når det kommer til gjæringsprosessen så er resultatet ca. det samme i snitt, men undergjæret ser ut til å gi mer konsistente resultat.

Kanskje bør man velge belgisk undergjæret øl for å være sikker på at juleølla er rimelig god? Vet ikke helt om vi har grunnlag for å si det, men artige resultat er det likevel.

Alkoholprosenten kan ha mye å si

En ting som undertegnede ikke hadde forventet var at alkoholprosenten kan ha en god del å si. Følgende viser samme poengfordeling som før, men denne gangen farger vi intervallene med alkoholprosenten. Tallet i søylene forteller snitt prosenten.

Poengfordeling med alkoholprosenten farget.

Poengfordeling med alkoholprosenten farget.

Det ser ut til at øl med for høy eller lav alkoholprosent ikke blir tatt i mot like godt som dem med mer normale alkoholnivåer. For å sjekke dette nærmere gjorde vi en scatter-plot mellom poeng og alkoholprosent.

Scatter-plot av alkoholprosent mot poeng.

Scatter-plot av alkoholprosent mot poeng.

Visuelt ser vi også her en tendens til at for høy eller lav alkoholprosent er negativt. Litt over 8% er perfekt – kanskje. Trendlinjene er polynomisk (andre grad) med følgende egenskaper:

X-aksen Y-aksen R-squared p-verdi
Alkoholprosent Smak 0,353001 < 0.0001
Alkoholprosent Duft 0,26575 < 0.0001
Alkoholprosent Total 0,373889 < 0.0001
Alkoholprosent Helhet 0,366977 < 0.0001

Hva har vi lært?

Helt klart: Den beste juleølla er ikke dansk, har rundt 8% alkoholvolum, og er overgjæret. Allerede av fargen vil du kunne ha en anelse om du vil like den, og når duften er sjekket så er dommen så og si allerede gitt. Helge og Stian vet hva de holder på med, mens vi to andre bør studere videre. Tja, vell, kanskje så bombastisk bør vi ikke være på alle punkter, men analysen har vært artig å utføre og kan kanskje være verdt en ettertanke. Er det en ting som er sikkert så går du ikke feil med Nøgene Øs juleøl.

Igjen takk til vertene, og øvrige jurymedlemmer. Det var utrolig gøy! Håper vi alle har blitt klokere på julebrygget. Ser frem til juleøltesten 2015.