Verified Commit 4f1bc26a authored by Markus Shepherd's avatar Markus Shepherd 🙊
Browse files

update numbers, calculations, and graphs

parent 8e75788c
......@@ -14,13 +14,13 @@ tags:
I often describe [BoardGameGeek (BGG)](https://boardgamegeek.com/) as "the [Internet Movie Database (IMDb)](https://www.imdb.com/) for games". Much like its cinematic counterpart, the biggest board game database not only collects all sorts of information obsessively, but also allows users to rate games on a scale from \\(1\\) (*awful - defies game description*) to \\(10\\) (*outstanding - will always enjoy playing*). These ratings are then used to rank games, with {{% game 174430 %}}Gloomhaven{{% /game %}} occupying the top spot since December 2017.
While BGG founder Scott Alden admitted in a recent interview on the excellent [Five Games For Doomsday](https://fivegamesfordoomsday.com/2020/07/06/scott-alden/) podcast that he doesn't care all that much about the rankings, gamers around the world certainly do. They would discuss heatedly any movement in the rankings, question why games X is up there while game Y is missing, and generally criticise the selection for either having *too many* or *not enough* recent releases.
While BGG founder Scott Alden admitted in a recent interview on the excellent [Five Games For Doomsday](https://fivegamesfordoomsday.com/2020/07/06/scott-alden/) podcast that he doesn't care all that much about the rankings, gamers around the world certainly do. They would discuss heatedly any movement in the rankings, question why games \\(X\\) is up there while game \\(Y\\) is missing, and generally criticise the selection for either having *too many* or *not enough* recent releases.
Reason enough for me to take a closer look at how the rankings work and some of the maths behind it.
Generally speaking, we want to rank a game higher the better its score is. The first instinct would be to just sum up all the ratings users gave to that particular game, divide by the number of ratings, and rank games from highest to lowest. What I just described would be the *arithmetic mean* (or just *average* if you feel less fancy) of the ratings, which is simple and intuitive, but suffers from a sever defect: a game with a single rating of \\(10\\) would always sit on top of the ranking, well ahead of much beloved games with thousands of votes that couldn't possibly be all \\(10\\)s.
The easiest fix is filtering out games with less than a certain number of ratings, say \\(100\\). That's a decent enough approach, and yields the following top 5 games as of the time of writing:
The easiest fix is filtering out games with less than a certain number of ratings, say \\(100\\).[^min-votes] That's a decent enough approach, and yields the following top 5 games as of the time of writing:
1. {{% game 261393 %}}Dungeon Universalis{{% /game %}}
2. {{% game 219217 %}}Arena: The Contest{{% /game %}}
......@@ -50,40 +50,40 @@ On the surface, this should be super easy to solve: in the formula above, we kno
\\[ \textrm{number of dummies} = \textrm{number of ratings} \cdot \frac{\textrm{average rating} - \textrm{geek score}}{\textrm{geek score} - \textrm{dummy value}} \\]
Now we should be able to plug in those values for any given game, say {{% game 199478 %}}Flamme Rouge{{% /game %}}, and get the result. With \\(10\\,875\\) ratings that average \\(7.562\\), and a geek score of \\(7.265\\), this yield:
Now we should be able to plug in those values for any given game, say {{% game 199478 %}}Flamme Rouge{{% /game %}}, and get the result. With \\(10\\,936\\) ratings that average \\(7.562\\), and a geek score of \\(7.266\\), this yield:
\\[ \textrm{number of dummies} = \textrm{10875} \cdot \frac{\textrm{7.562} - \textrm{7.265}}{\textrm{7.265} - \textrm{5.5}} \\approx 1830. \\]
\\[ \textrm{number of dummies} = 10936 \cdot \frac{7.562 - 7.266}{7.266 - 5.5} \\approx 1830. \\]
So, there's about \\(1830\\) dummy ratings, end of story. Right? Unfortunately, not quite. When computing this formula for different games, the results vary *wildly*, as you can see from this histogram over the results for the same calculation with other games:
{{< img src="num_dummies_hist" alt="Histogram over the number of dummy votes calculated by explicit formula" >}}
And this plot is even cropped, the results vary from \\(-1.4\\) million to \\(+660\\) thousand, though some \\(90\\%\\) lie within the above range, with a mean of around \\(1450\\) and a median of around \\(1587\\).
And this plot is even cropped, the results vary from \\(-1.4\\) million to \\(+810\\) thousand, though some \\(90\\%\\) lie within the above range, with a mean of around \\(1604\\) and a median of around \\(1590\\).
What's going on, why are the results so inconsistent? The problem is the ranking's *secret sauce*. Both IMDb and BGG stress is that they only consider *regular* voters for their rankings. That's the most mysterious part of the system as it's the easiest to manipulate, so we'll just have to take their word for it. For this investigation it means that the average rating BGG publishes includes all the ratings, but the geek score might *not*.
Still, clearly something is happening around the **\\(1500\\) ratings** mark, so we are at least getting closer to an answer. If exact calculations won't work, maybe we can approximate the correct value instead?
Still, clearly something is happening around the **\\(1600\\) ratings** mark, so we are at least getting closer to an answer. If exact calculations won't work, maybe we can approximate the correct value instead?
# Trial & error
Let's take a step back here. What we're really trying to achieve here is not finding the exact formula for that mysterious "geek score", but rather recreate the BGG ranking. That is, we want to find the values in the above formula, such that the resulting ranking matches BGG's ranking as closely as possible. Luckily, statistics has all the tools we need. [Spearman correlation](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) measures rank correlation – just what we need. This will be \\(1\\) if both rankings sort in exactly the same way, and \\(0\\) if they sort entirely differently. Again, don't worry about the details, just trust the maths.
Let's take a step back here. What we're really trying to achieve here is not finding the exact formula for that mysterious "geek score", but rather recreate the BGG ranking. That is, we want to find the values in the above formula, such that the resulting ranking matches BGG's ranking as closely as possible. Luckily, statistics has all the tools we need. [Spearman correlation](https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient) measures rank correlation – just what we need. This will be \\(1\\) if both rankings sort in exactly the same way, \\(0\\) if there's no relation, and \\(-1\\) if they sort exactly the opposite way. Again, don't worry about the details, just trust the maths.
What we can do now is fairly simply and quickly compute the rankings for different number of dummy ratings, and pick the value with the highest Spearman correlation. Without further ado, here are the results:
{{< img src="num_dummies_corr" alt="Spearman correlation for different number of dummy ratings" >}}
The best correlation of around \\(0.996\\) is achieved with **\\(1489\\) dummy ratings**. However, it is worth noticing that the changes in the correlation are very, *very* small throughout the range we examined here (\\(1000\\) to \\(2500\\)), so let's dig still a little deeper.
The best correlation of around \\(0.996\\) is achieved with **\\(1488\\) dummy ratings**. However, it is worth noticing that the changes in the correlation are very, *very* small throughout the range we examined here (\\(1000\\) to \\(2500\\)), so let's dig still a little deeper.
# Optimisation
What we have here at hand is actually a classic optimisation task: a real valued function in one unknown (or two if we allow a variable dummy value as well) which we'd like to maximise. This is a well-studied field, with many fast and simple implementations that provide us the solution in no time. Unsuprisingly, we get almost the same result as above: the best possible correlation is \\(0.996\\) with around **\\(1486\\) dummy ratings**.
What we have here at hand is actually a classic optimisation task: a real valued function in one unknown (or two if we allow a variable dummy value as well) which we'd like to maximise. This is a well-studied field, with many fast and simple implementations that provide us the solution in no time. Unsuprisingly, we get almost the same result as above: the best possible correlation is \\(0.996\\) with around **\\(1488\\) dummy ratings**.
But since we made it this far, let's take it one step further. So far, we tried to optimise the correlation in order to recreate BGG's ranking. However, we can also try to recreate the actual *geek scores*. That is, we can look for the number of dummy ratings that will yield the closest to the actual geek score with our calculations. What exactly we mean by "closest" is up to us to define. A common metric is the *mean squared error*.[^root] It's not worth getting into the maths here either, but the general idea is that we want to punish outliers in our estimates more (qudratically so) the further away they lie from the actual datapoint. Long story short, this yields a minimum for around **\\(1630\\) dummy ratings**.
But since we made it this far, let's take it one step further. So far, we tried to optimise the correlation in order to recreate BGG's ranking. However, we can also try to recreate the actual *geek scores*. That is, we can look for the number of dummy ratings that will yield the closest to the actual geek score with our calculations. What exactly we mean by "closest" is up to us to define. A common metric is the *mean squared error*.[^root] It's not worth getting into the maths here either, but the general idea is that we want to punish outliers in our estimates more (qudratically so) the further away they lie from the actual datapoint. Long story short, this yields a minimum for around **\\(1636\\) dummy ratings**.
Let's take one last swing and see what happens if we don't fix the dummy value at \\(5.5\\) but allow that to be variable as well. This is no problem for the optimisation algorithm and yields the following results:
* the best correlation with **\\(1888\\) dummy ratings of \\(5.552\\)**, and
* the least squared error with **\\(1611\\) dummy ratings of \\(5.494\\)**.
* the best correlation with **\\(1942\\) dummy ratings of \\(5.554\\)**, and
* the least squared error with **\\(1616\\) dummy ratings of \\(5.494\\)**.
Either of those improvements are hardly noticable (in fact insible after rounding), but they do confirm nicely a dummy value of \\(5.5\\).
......@@ -101,7 +101,7 @@ I'll send you off with some rankings that were obtained by making different choi
## Using the ratings average as dummy value
I've mentioned before that the average rating across all games is around \\(7\\) – a little[^min-votes] more precisely \\(7.08245\\). What if we chose that as the dummy rating, but left their number at \\(1500\\)? The result should be a ranking that is a little friendlier to newer titles with fewer ratings as their score isn't dragged all the way down to \\(5.5\\) in the beginning.
I've mentioned before that the average rating across all games is around \\(7\\) – a little[^min-votes] more precisely \\(7.08278\\). What if we chose that as the dummy rating, but left their number at \\(1600\\)? The result should be a ranking that is a little friendlier to newer titles with fewer ratings as their score isn't dragged all the way down to \\(5.5\\) in the beginning.
1. {{% game 174430 %}}Gloomhaven{{% /game %}}
2. {{% game 161936 %}}Pandemic Legacy: Season 1{{% /game %}}
......@@ -109,16 +109,16 @@ I've mentioned before that the average rating across all games is around \\(7\\)
4. {{% game 224517 %}}Brass: Birmingham{{% /game %}}
5. {{% game 55690 %}}Kingdom Death: Monster{{% /game %}}
6. {{% game 167791 %}}Terraforming Mars{{% /game %}}
7. {{% game 220308 %}}Gaia Project{{% /game %}}
8. {{% game 182028 %}}Through the Ages: A New Story of Civilization{{% /game %}}
9. {{% game 291457 %}}Gloomhaven: Jaws of the Lion{{% /game %}}
7. {{% game 291457 %}}Gloomhaven: Jaws of the Lion{{% /game %}}
8. {{% game 220308 %}}Gaia Project{{% /game %}}
9. {{% game 182028 %}}Through the Ages: A New Story of Civilization{{% /game %}}
10. {{% game 187645 %}}Star Wars: Rebellion{{% /game %}}
Sure enough, the brand new {{% game 291457 %}}Jaws of the Lion{{% /game %}} with less than \\(3000\\) ratings already shows up in the top 10. The other game that sticks out here is {{% game 55690 %}}Kingdom Death: Monster{{% /game %}}. This Kickstarter success story clearly attracted a lot of enthusiasts, but not necessarily the mass.
## Using the top 250 number of ratings
Just like IMDb publishes only their top 250 movies, we can consider the same and crank up the number of dummy ratings. A good number seems to be the 250th most rated game on BGG, which has been rated \\(11\\,983\\) times. Using BGG's standard dummy value of \\(5.5\\), we obtain a ranking that is much more skewed towards proven classics:
Just like IMDb publishes only their top 250 movies, we can consider the same and crank up the number of dummy ratings. A good number seems to be the 250th most rated game on BGG, which has been rated \\(12\\,014\\) times. Using BGG's standard dummy value of \\(5.5\\), we obtain a ranking that is much more skewed towards proven classics:
1. {{% game 174430 %}}Gloomhaven{{% /game %}}
2. {{% game 167791 %}}Terraforming Mars{{% /game %}}
......@@ -135,21 +135,21 @@ The most recent release on this list is {{% game 174430 %}}Gloomhaven{{% /game %
## Combining both!
Finally, let's do what IMDb does (or used to do), and add to each game's ratings \\(11\\,983\\) dummy ratings of \\(7.08245\\):
Finally, let's do what IMDb does (or used to do), and add to each game's ratings \\(12\\,014\\) dummy ratings of \\(7.08278\\):
1. {{% game 174430 %}}Gloomhaven{{% /game %}}
2. {{% game 161936 %}}Pandemic Legacy: Season 1{{% /game %}}
3. {{% game 167791 %}}Terraforming Mars{{% /game %}}
4. {{% game 169786 %}}Scythe{{% /game %}}
5. {{% game 12333 %}}Twilight Struggle{{% /game %}}
6. {{% game 182028 %}}Through the Ages: A New Story of Civilization{{% /game %}}
7. {{% game 224517 %}}Brass: Birmingham{{% /game %}}
6. {{% game 224517 %}}Brass: Birmingham{{% /game %}}
7. {{% game 182028 %}}Through the Ages: A New Story of Civilization{{% /game %}}
8. {{% game 187645 %}}Star Wars: Rebellion{{% /game %}}
9. {{% game 193738 %}}Great Western Trail{{% /game %}}
10. {{% game 173346 %}}7 Wonders Duel{{% /game %}}
The effects of more, but higher dummy ratings seem to almost cancel each other out. Compared to BGG's actual top 10, only {{% game 233078 %}}Twilight Imperium{{% /game %}} and {{% game 220308 %}}Gaia Project{{% /game %}} are missing, otherwise this ranking looks very familiar. Turns out, BGG did a pretty good job designing its ranking!
[^min-votes]: Throughout this article I only considered games with at least \\(100\\) ratings, mostly to ensure that the very long tail of games with few ratings won't unduely skew the results. However, most of the calculations would only change in some negligible decimals when including all games.
[^jotl]: {{% game 291457 %}}Jaws of the Lion{{% /game %}} is something of an exception here and will undoubtably shoot into the BGG top 10 very soon. In fact, it might be the only game with the potential to unseat {{% game 174430 %}}Gloomhaven{{% /game %}} as the number 1.
[^root]: It's probably even more common to use the *root* mean squared error, but for boring mathematical reasons, it doesn't make a difference when it comes to optimisation. In fact, we could even drop the word *mean* from our metric and still obtain the same optimal point, but then we'd have to implement it ourselves, so there's no point.
[^min-votes]: Throughout this article I discarded games with less than \\(100\\) ratings, but the effect of this only shows in some negligible decimals.
......@@ -32,10 +32,10 @@ z
<defs>
<path d="M 0 0
L 0 3.5
" id="mdbd2b7c087" style="stroke:#000000;stroke-width:0.8;"/>
" id="m50cea9df1c" style="stroke:#000000;stroke-width:0.8;"/>
</defs>
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="69.218182" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="69.218182" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_1">
......@@ -87,7 +87,7 @@ z
<g id="xtick_2">
<g id="line2d_2">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="109.8" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="109.8" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_2">
......@@ -129,7 +129,7 @@ z
<g id="xtick_3">
<g id="line2d_3">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="150.381818" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="150.381818" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_3">
......@@ -164,7 +164,7 @@ z
<g id="xtick_4">
<g id="line2d_4">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="190.963636" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="190.963636" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_4">
......@@ -212,7 +212,7 @@ z
<g id="xtick_5">
<g id="line2d_5">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="231.545455" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="231.545455" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_5">
......@@ -269,7 +269,7 @@ z
<g id="xtick_6">
<g id="line2d_6">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="272.127273" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="272.127273" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_6">
......@@ -285,7 +285,7 @@ z
<g id="xtick_7">
<g id="line2d_7">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="312.709091" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="312.709091" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_7">
......@@ -301,7 +301,7 @@ z
<g id="xtick_8">
<g id="line2d_8">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="353.290909" xlink:href="#mdbd2b7c087" y="252"/>
<use style="stroke:#000000;stroke-width:0.8;" x="353.290909" xlink:href="#m50cea9df1c" y="252"/>
</g>
</g>
<g id="text_8">
......@@ -321,10 +321,10 @@ z
<defs>
<path d="M 0 0
L -3.5 0
" id="m712d9ff00b" style="stroke:#000000;stroke-width:0.8;"/>
" id="m66204685dc" style="stroke:#000000;stroke-width:0.8;"/>
</defs>
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="228.166299"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="226.226588"/>
</g>
</g>
<g id="text_9">
......@@ -391,7 +391,7 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-53"/>
</defs>
<g transform="translate(12.009375 231.965517)scale(0.1 -0.1)">
<g transform="translate(12.009375 230.025807)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -404,12 +404,12 @@ z
<g id="ytick_2">
<g id="line2d_10">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="194.934153"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="193.149504"/>
</g>
</g>
<g id="text_10">
<!-- 0.9956 -->
<g transform="translate(12.009375 198.733371)scale(0.1 -0.1)">
<g transform="translate(12.009375 196.948723)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -422,7 +422,7 @@ z
<g id="ytick_3">
<g id="line2d_11">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="161.702007"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="160.07242"/>
</g>
</g>
<g id="text_11">
......@@ -438,7 +438,7 @@ L 8.203125 64.59375
z
" id="DejaVuSans-55"/>
</defs>
<g transform="translate(12.009375 165.501225)scale(0.1 -0.1)">
<g transform="translate(12.009375 163.871639)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -451,12 +451,12 @@ z
<g id="ytick_4">
<g id="line2d_12">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="128.469861"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="126.995336"/>
</g>
</g>
<g id="text_12">
<!-- 0.9958 -->
<g transform="translate(12.009375 132.269079)scale(0.1 -0.1)">
<g transform="translate(12.009375 130.794555)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -469,12 +469,12 @@ z
<g id="ytick_5">
<g id="line2d_13">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="95.237715"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="93.918252"/>
</g>
</g>
<g id="text_13">
<!-- 0.9959 -->
<g transform="translate(12.009375 99.036933)scale(0.1 -0.1)">
<g transform="translate(12.009375 97.717471)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -487,12 +487,12 @@ z
<g id="ytick_6">
<g id="line2d_14">
<g>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m712d9ff00b" y="62.005569"/>
<use style="stroke:#000000;stroke-width:0.8;" x="54" xlink:href="#m66204685dc" y="60.841168"/>
</g>
</g>
<g id="text_14">
<!-- 0.9960 -->
<g transform="translate(12.009375 65.804787)scale(0.1 -0.1)">
<g transform="translate(12.009375 64.640387)scale(0.1 -0.1)">
<use xlink:href="#DejaVuSans-48"/>
<use x="63.623047" xlink:href="#DejaVuSans-46"/>
<use x="95.410156" xlink:href="#DejaVuSans-57"/>
......@@ -504,261 +504,207 @@ z
</g>
</g>
<g id="line2d_15">
<path clip-path="url(#p25591d078c)" d="M 69.218182 240.679539
L 75.914182 206.691243
L 80.378182 186.004291
L 80.986909 183.507391
L 83.218909 174.223781
L 89.306182 151.178738
L 90.117818 148.489153
L 91.538182 143.734577
L 96.002182 129.435418
L 96.610909 127.694085
L 97.625455 124.905951
L 101.277818 115.018472
L 102.901091 111.033029
L 104.118545 107.690104
L 104.727273 106.250999
L 106.959273 101.014992
L 113.046545 88.021046
L 113.655273 86.998548
L 114.264 85.837177
L 114.872727 84.845196
L 116.901818 81.285826
L 117.307636 80.640417
L 118.930909 77.967128
L 122.786182 72.012854
L 123.394909 71.152446
L 125.424 68.271803
L 126.438545 67.303699
L 127.047273 66.52369
L 129.482182 63.303713
L 130.293818 62.406253
L 130.699636 62.154195
L 131.917091 60.973752
L 132.322909 60.599903
L 133.134545 59.870052
L 134.352 58.561887
L 135.569455 57.42547
L 138.410182 55.188991
L 139.018909 54.849914
L 140.033455 53.943953
L 141.048 53.474303
L 141.859636 52.915937
L 142.062545 52.856247
L 143.077091 52.050466
L 144.294545 51.390149
L 145.512 50.504444
L 145.917818 50.313324
L 146.526545 49.956417
L 148.758545 48.708655
L 149.773091 48.287528
L 149.976 48.126724
L 150.381818 48.076523
L 155.251636 46.362477
L 155.454545 46.349657
L 155.657455 46.214701
L 156.672 46.116366
L 157.686545 45.940376
L 158.295273 45.777194
L 159.106909 45.576439
L 159.512727 45.473293
L 159.918545 45.507315
L 160.933091 45.145982
L 162.556364 44.968088
L 162.962182 44.954982
L 164.179636 44.790953
L 164.585455 44.808678
L 164.788364 44.728431
L 164.991273 44.808573
L 165.194182 44.736661
L 165.802909 44.774003
L 168.440727 44.443636
L 168.846545 44.617934
L 169.658182 44.607926
L 170.672727 44.727181
L 172.093091 44.855963
L 172.498909 44.852038
L 174.933818 45.024586
L 175.339636 45.042759
L 175.745455 45.07756
L 176.557091 45.297636
L 176.962909 45.447928
L 177.368727 45.534263
L 178.383273 45.821678
L 178.789091 45.865076
L 180.209455 45.997906
L 180.615273 46.072958
L 181.021091 46.267732
L 181.629818 46.529144
L 182.441455 46.942644
L 182.644364 46.984385
L 183.050182 47.239572
L 183.456 47.432308
L 183.861818 47.545313
L 184.876364 47.767685
L 185.282182 47.779092
L 185.688 47.962884
L 186.702545 48.303031
L 187.108364 48.498735
L 188.325818 49.105238
L 188.731636 49.271292
L 189.340364 49.529804
L 189.949091 49.798405
L 190.963636 50.197484
L 191.369455 50.297051
L 191.775273 50.395853
L 192.181091 50.592429
L 193.195636 51.424023
L 193.601455 51.535933
L 194.413091 52.131141
L 195.021818 52.283767
L 195.630545 52.766091
L 196.036364 53.01306
L 196.442182 53.217623
L 198.471273 54.261869
L 198.877091 54.539121
L 199.08 54.549501
L 201.717818 56.019355
L 202.935273 56.559585
L 204.558545 57.568969
L 205.167273 57.75955
L 206.587636 58.630921
L 207.196364 59.146297
L 207.805091 59.480275
L 208.819636 60.116654
L 209.022545 60.170689
L 209.834182 60.815834
L 210.645818 61.343579
L 212.472 62.370415
L 213.486545 63.211105
L 214.095273 63.583935
L 214.906909 64.302075
L 215.515636 64.578164
L 217.341818 65.851383
L 217.950545 66.352422
L 218.356364 66.604947
L 219.370909 67.520606
L 222.211636 69.81001
L 223.023273 70.408409
L 224.037818 71.215471
L 224.443636 71.449598
L 230.530909 76.70537
L 233.574545 79.433961
L 235.806545 81.464248
L 244.531636 90.015396
L 245.140364 90.715644
L 246.560727 91.993684
L 247.372364 92.832353
L 247.778182 93.224101
L 249.401455 94.967585
L 250.416 96.059992
L 250.821818 96.518046
L 255.082909 101.168512
L 256.300364 102.50193
L 258.735273 105.083701
L 266.04 112.925898
L 267.866182 114.912747
L 268.880727 116.069401
L 269.489455 116.830082
L 269.895273 117.198713
L 270.504 117.845357
L 271.112727 118.450855
L 271.924364 119.359286
L 272.736 120.058798
L 273.750545 121.187538
L 274.359273 121.72309
L 274.968 122.471594
L 275.373818 122.799576
L 276.185455 123.719767
L 276.794182 124.432539
L 277.808727 125.617304
L 280.446545 128.738362
L 281.258182 129.66628
L 281.866909 130.470676
L 283.287273 132.104099
L 283.693091 132.534835
L 285.113455 134.266993
L 285.925091 135.114382
L 286.939636 136.321924
L 287.751273 137.317827
L 288.765818 138.383682
L 290.592 140.58613
L 290.997818 140.937918
L 291.606545 141.632207
L 292.621091 142.956892
L 294.244364 144.795115
L 295.056 145.696154
L 295.664727 146.374287
L 296.882182 147.928388
L 299.722909 151.236243
L 300.331636 152.0154
L 301.143273 152.943501
L 302.360727 154.398944
L 302.969455 155.061819
L 305.404364 158.00837
L 306.216 158.994541
L 306.621818 159.405621
L 307.839273 161.016313
L 308.448 161.736937
L 309.056727 162.378191
L 310.882909 164.52566
L 311.491636 165.161476
L 312.303273 166.427215
L 314.738182 169.385669
L 315.549818 170.447667
L 315.955636 170.934457
L 316.564364 171.629346
L 317.173091 172.266108
L 317.984727 173.187515
L 318.390545 173.693976
L 319.202182 174.784545
L 319.608 175.307984
L 320.825455 176.881192
L 321.434182 177.586215
L 323.260364 179.666077
L 323.666182 180.197819
L 324.072 180.637716
L 324.883636 181.654098
L 325.492364 182.338233
L 326.506909 183.546037
L 326.912727 183.941923
L 328.130182 185.435809
L 328.941818 186.416951
L 329.753455 187.485848
L 332.797091 191.444852
L 334.014545 192.858014
L 334.826182 194.020094
L 336.449455 195.954912
L 337.058182 196.680378
L 338.884364 198.769591
L 339.290182 199.381209
L 340.101818 200.390305
L 341.116364 201.646958
L 348.624 210.818172
L 349.232727 211.586149
L 349.638545 211.952997
L 350.653091 213.452177
L 351.464727 214.464245
L 354.508364 218.166196
L 355.117091 218.840916
L 355.522909 219.340691
L 356.334545 220.44971
L 357.146182 221.540026
L 357.957818 222.518141
L 358.363636 223.133095
L 360.392727 225.690895
L 362.624727 228.690371
L 365.668364 232.317551
L 366.074182 232.896359
L 366.277091 233.103877
L 366.682909 233.730962
L 368.914909 236.225529
L 369.726545 237.263128
L 370.538182 238.356035
L 371.146909 239.078716
L 372.161455 240.226921
L 373.176 241.712175
<path clip-path="url(#p2e868144a5)" d="M 69.218182 240.196335
L 72.870545 220.619333
L 74.696727 211.290385
L 77.740364 197.097225
L 82.610182 176.144962
L 83.827636 171.270379
L 85.450909 164.916049
L 89.914909 149.164827
L 94.581818 134.091802
L 95.799273 130.305446
L 97.016727 126.603048
L 98.437091 122.598918
L 99.654545 119.247488
L 100.669091 116.682548
L 107.162182 100.559134
L 109.394182 95.664871
L 110.205818 93.839574
L 113.249455 87.594133
L 114.061091 86.188491
L 114.669818 85.070484
L 121.365818 74.614305
L 121.771636 74.113147
L 122.583273 72.772083
L 122.989091 72.278136
L 126.032727 67.90262
L 127.858909 65.695547
L 132.12 61.316244
L 136.584 57.559358
L 137.192727 56.767841
L 137.801455 56.229418
L 138.410182 55.684206
L 139.018909 55.216498
L 139.221818 55.217154
L 140.033455 54.625357
L 141.250909 53.792695
L 141.656727 53.367835
L 142.062545 53.170487
L 142.671273 52.682201
L 143.482909 52.320027
L 147.135273 50.018301
L 147.946909 49.564827
L 148.555636 49.361758
L 149.164364 48.972184
L 149.367273 48.683989
L 149.976 48.522305
L 150.787636 48.025454
L 151.193455 47.89108
L 151.802182 47.604267
L 152.613818 47.372731
L 152.816727 47.330211
L 153.222545 47.118786
L 153.628364 46.980632
L 154.237091 46.73151
L 155.251636 46.371855
L 155.860364 45.953571
L 156.672 45.813446
L 156.874909 45.699984
L 157.280727 45.687436
L 158.904 45.442266
L 159.918545 45.500801