Data Visualization
Game Theory and Risk Management in one chart
An introduction to risk management principles
Basic risk management principles are presented from a data scientist point of view using the theory of expected utility. The risk management strategies are summarized in one chart (with detailed explanations on how to read the chart) where iso-risk curves are materialized.
A simple risky situation
Let us first assume that we have a total wealth W₀. Now, if we are exposed to the risk of losing an amount L (obviously less than W₀) with a probability p in the near future, we cannot consider that our wealth is still W₀ (which is obvious when p = 1). Instead, we should compute what is called in game theory the “certainty equivalent” of our wealth in a risky environment.
How risk is reducing wealth
The certainty equivalent is the amount Wₑ such that the utility of Wₑ is the same as the utility of our assets exposed to a loss. If we are risk neutral, the utility function to be used is simply the identity and so the certainty equivalent is simply our current wealth reduced by the loss expectation (which is rather intuitive even without any notion of utility function, when giving it a thought): proof is that if the utility of Wₑ (which is Wₑ) is equal to the utility of our wealth exposed to a loss (what is called a “lottery” in game theory), it means that Wₑ = (1-p) W₀ + p (W₀-L) = W₀ - pL (in game theory the utility of a lottery is the expected utility of the lottery outcomes), and so Wₑ= W₀ - pL. If we are risk-averse, we can for example use a logarithm as a utility function, and so ln(Wₑ) is equal to (1-p) ln(W₀) + p ln(W₀-L), meaning that Wₑ = W₀^(1-p) (W₀-L)^p.
What is the cost of the risk
Note that our representation is very simple, as we have only one probability p of losing exactly L in the near future (no discounting rate applied), but it will be enough to illustrate the concepts. We now have to ask ourselves what is the cost of the risk, and this is very straightforward: it is the difference between our wealth W₀ before we were exposed to any loss and Wₑ we now have because of the risk exposure. For risk-neutral people, the risk cost r = W₀ - Wₑ = W₀ - (W₀ - pL) = pL which is rather intuitive as it is only the expected loss. For risk-averse people (with the logarithm utility function), we get a slightly more complicated figure as risk cost, r being equal to W₀-W₀^(1-p) (W₀-L)^p = W₀ [1 - (1 - L/W₀)ᵖ].
Drawing the risk map
It is clear that different combinations of the amount L possibly lost and loss probability p can be associated with the same risk cost r. We shall draw on a chart all these points that represent the same risk cost r, the amount L being represented on the y-axis and the probability p on the x-axis. In order to find the equation of the curves on which all points are associated with the same risk r (which is why these curves are usually called “iso-risk curves”) we only have to set r as a constant and deduce the expression of L depending on p. For risk-neutral entities, we start from the definition of r=W₀-Wₑ = pL implying that L = r/p. For risk-averse entities we do the same starting from r = W₀-Wₑ = W₀ - W₀^(1 - p) (W₀ - W)^p and we finally get L=W₀ [1 - (1-r/W₀)^(1/p)] (that is not defined for p = 0 but this case is not interesting except to see that there is a discontinuity related to the Allais paradox: even if p is extremely small we are supposed to care for the risk according to the utility function we chose, but in reality we would never consider such a small risk — we shall ignore this as this is unrelated to our main concern).
To draw the chart I took W₀ = 5. We can see the iso-risk curves of both risk-neutral and risk-averse individuals for different values of the risk cost r.
Exploring the map
Representing risk objects
This is where it all becomes interesting. Corporates have plants, warehouses, shops, offices… that are exposed to losses, and they can plot these locations on the map we created: e.g. a warehouse exposed to a loss of 2 with probability 40% will appear as the point (x = 0.4, y = 2).
Given the iso-risk curves that are drawn on the chart, we can see that the risk cost is a bit less than r = 1 (let us assume r = 0.9), if we assume the company is risk-averse. However not all firms are risk-averse: insurance companies are close to being risk-neutral (putting aside their fees) because they can mutualize the risk, leveraging the law of large numbers. For an insurance company, the risk cost r will be even more below 1 (let us assume r = 0.8) and so the insurance company will be able to propose a deal: the owner of the warehouse will pay a premium of 0.85 to transfer the risk to the insurer, thus sparing 0.9 as a risk cost. In the end the insurer will be paid 0.85 to bear a cost of 0.8, thus earning 0.05, while the other firm will pay 0.85 to get rid of the cost of 0.9, thus earning 0.05 as well.
Identifying strategic areas
Exploring more the chart we can identify four main areas:
- risk objects (plants, warehouses, shops, offices…) located in the bottom-left area of the risk map have a very good risk profile: insurance is inexpensive (insurance premium is always less than 1).
- risk objects in the top-left area have “severity-loss” profiles, meaning that big losses can occur. However the risk profile is still good as the loss probability is small (less than 40%), and insurance is very useful as it is inexpensive relative to the cost of the risk: a risk costing 3.5 can be insured for 1.5 (-57%).
- risk objects located in the bottom-right area have a “probability-loss” or “frequency-loss” profile as losses have a high probability (more than 40%) of occurring (note that in our simple representation where the lottery is a simple Bernoulli trial, loss probability and loss frequency are the same, which is not true in general). In that case risk transfer does not appear to be very interesting, as the risk cost for corporates and insurances is pretty much the same. In general there is little interest in being covered against little losses very likely to occur, if any. Companies can self-insure these locations (through captives) or use deductibles in order to reduce the overall premium paid: the insurer will not pay for losses below 1.5 and occurring at these locations.
- risk objects in the top-right area of the map have a poor risk profile: losses are both big and highly probable. Insurance is expensive, even with respect to the risk cost. For instance, a risk costing 4.5 can be insured for 4 (-11%).
Fighting the risk
Prevention and protection
In case of high risk, measures should be taken to either reduce the severity of the possible losses (protection measures) or to reduce the probability of a loss occurring (prevention measures) — or both.
Helping companies engaging in prevention and protection measures to improve their risk profile, protect business and save lives is what risk engineers are doing — and data scientists can support them in their work.
Risk transfer
Taking proper measures will help in making the most of the risk transfer strategy, by bearing a reduced risk cost or by insuring risk objects at interesting prices (even though premiums do not directly depend on the risk profile in the short run because of the evolution of market conditions, they do in the longer run).
Conclusion
With a very basic statistical model combined with game theory we were able to easily understand how and when it is beneficial to get insured, as well as to define the main strategies to reduce the risk and their impact on how we are benefitting from the insurance. The conclusions all fit in one chart where it is possible to identify at once both the insurance premium paid and the financial benefits of being insured.
R code
If you want to reproduce or improve the chart using R, the code is as follows:
#### Graphical options ####
background <- TRUE
drawArrows <- TRUE # Arrows are drawn only if background is displayed
drawPoints <- TRUE
nb_cases <- 10
sharpness <- 10000
#### Total wealth ####
x0 <- 5
#### Plot ####
r <- x0/10
p <- seq(from = 0, to = 1, by = 1/sharpness)
n <- length(p)
xNeutral <- r/p # Loss estimates for a risk-neutral entity
xAverse <- x0 * (1 - (1-r/x0)^(1/p)) # Loss estimates for a risk-averse entity
plot(x = p, y = xAverse, type = "l", col = "red",
xlim = c(0, 1.01), ylim = c(0, 1.1 * x0),
xlab = "", ylab = "",
xaxs = "i", yaxs = "i",
main = "Iso-risk curves for risk-neutral and risk-averse entities")
title(sub = "Risk cost r is defined as the difference between the current wealth \n and the certainty equivalent in a risky environment", cex.sub = 0.8)
for (r in seq(from = x0/nb_cases, to = x0, by = x0/nb_cases)){
xNeutral <- r/p
xAverse <- x0 * (1 - (1-r/x0)^(1/p))
lines(x = p, y = xAverse, col = "red")
lines(x = p, y = xNeutral, col = "blue")
text(x = p[n] - 0.03, y = xAverse[n] - x0/125, label = paste("r =", round(r, digits = 2)), cex = 0.8)
}
if (background){
rect(xleft = 0, ybottom = 0, xright = 0.4, ytop = 0.3*x0,
col = rgb(red = 30.59/100, green = 89.41/100, blue = 30.59/100, alpha = 0.3), border = "transparent")
text(x = 0.175, y = 1 * x0/5, label = "Low risk: inexpensive insurance", col = "darkgreen", cex = 0.8)
rect(xleft = 0.4, ybottom = 0, xright = 1.01, ytop = 0.3*x0,
col = rgb(red = 25.1/100, green = 72.55/100, blue = 100/100, alpha = 0.3), border = "transparent")
text(x = 0.707, y = 0.22 * x0/5, label = "Frequency losses:", col = "blue", cex = 0.8)
text(x = 0.8, y = 0.08 * x0/5, label = "self-insured or inexpensive insurance", col = "blue", cex = 0.8)
rect(xleft = 0, ybottom = 0.3*x0, xright = 0.4, ytop = x0,
col = rgb(red = 25.1/100, green = 72.55/100, blue = 100/100, alpha = 0.3), border = "transparent")
text(x = 0.09, y = 1.79 * x0/5, label = "Severity losses:", col = "blue", cex = 0.8)
text(x = 0.174, y = 1.65 * x0/5, label = "relatively inexpensive insurance", col = "blue", cex = 0.8)
rect(xleft = 0.4, ybottom = 0.3*x0, xright = 1.01, ytop = x0,
col = rgb(red = 100/100, green = 25.1/100, blue = 25.1/100, alpha = 0.3), border = "transparent")
text(x = 0.76, y = 1.65 * x0/5, label = "High risk: expensive insurance", col = "darkred", cex = 0.8)
title(xlab = "Loss probability", line = 2, cex.lab = 1)
title(ylab = "Loss estimate", line = 2, cex.lab = 1)
}else{
title(xlab = "Loss probability", line = -1, cex.lab = 1)
title(ylab = "Loss estimate", line = -1, cex.lab = 1)
}
if ((background) && (drawArrows)){
arrows(x0 = 0.55, y0 = 2.5 * x0/5, x1 = 0.3, y1 = 2.5 * x0/5, length = 0.1, col = "gray22")
text(x = 0.46, y = 2.6 * x0/5, label = "Prevention", col = "gray22", cex = 0.8)
arrows(x0 = 0.55, y0 = 2.5 * x0/5, x1 = 0.55, y1 = 1 * x0/5, length = 0.1, col = "gray22")
text(x = 0.61, y = 2 * x0/5, label = "Protection", col = "gray22", cex = 0.8)
}
if(drawPoints){
points(x = 0.4, y = 0.4 * x0, pch = 16, col = "gray22")
arrows(x0 = 0.4, y0 = 0, x1 = 0.4, y1 = 0.4 * x0, length = 0, col = "gray22", lty = 3)
arrows(x0 = 0, y0 = 0.4 * x0, x1 = 0.4, y1 = 0.4 * x0, length = 0, col = "gray22", lty = 3)
text(x = 0.4, y = 0.425 * x0, label = "Warehouse", cex = 0.8, col = "gray22")
}
text(x = 0.083, y = 1.02 * x0, label = "Current wealth", cex = 0.8)
legend("bottomleft", legend = c("Risk-neutral", "Risk-averse"), col = c("blue", "red"), pch = c("_", "_"))