Skip to content

Instantly share code, notes, and snippets.

@stef
Created November 18, 2017 01:29
Show Gist options
  • Save stef/fbf2b6cb7bdb93e204c4387047deac2f to your computer and use it in GitHub Desktop.
Save stef/fbf2b6cb7bdb93e204c4387047deac2f to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"total monthly costs 233.333333333\n",
"contributions min: 23.333333 avg: 46.666667 max: 93.333333 // weight 2.000000\n"
]
}
],
"source": [
"import math\n",
"\n",
"# costs - in EUR\n",
"insurance = 15 # estimated monthly amount\n",
"bank_account = 100 / 12.0 # estimated annual amount converted to monthly cost\n",
"rent = 200\n",
"internet = 10 # estimated monthly cost\n",
"\n",
"# global consts\n",
"total_monthly_costs = insurance + bank_account + rent + internet\n",
"print \"total monthly costs\", total_monthly_costs\n",
"\n",
"backup_budget_max = 6 # months\n",
"steepness = 2 # for adjusting the steepness of the weight in relation to the backup budget\n",
" # higher values increase steepness, see below for interactive example\n",
"\n",
"# dynamic variables\n",
"backup_budget = 0 # how much we have as a safety cushion, max = backup_budget_max * total_monthly_costs\n",
"members = 10 # assumption\n",
"\n",
"##### don't change anything below\n",
"\n",
"# the function\n",
"def getcontribs(members):\n",
" # we want to adjust the total monthly costs in relation to the backup budget,\n",
" # see the 3rd cell for a graph on how the weight changes with the backup budget\n",
" weight = 1+(steepness**(backup_budget_max-backup_budget/float(total_monthly_costs)))/steepness**backup_budget_max\n",
"\n",
" average_monthly_contrib = (total_monthly_costs / members) * weight\n",
" # max and min are relative to average\n",
" max_monthly_contrib = average_monthly_contrib * 2\n",
" min_monthly_contrib = average_monthly_contrib / 2.0\n",
" return min_monthly_contrib, average_monthly_contrib, max_monthly_contrib, weight\n",
"\n",
"print \"contributions min: %f avg: %f max: %f // weight %f\" % getcontribs(members)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"[(4, 58.333333333333336, 116.66666666666667, 233.33333333333334, 2.0),\n",
" (5, 46.66666666666667, 93.33333333333334, 186.66666666666669, 2.0),\n",
" (6, 38.88888888888889, 77.77777777777779, 155.55555555555557, 2.0),\n",
" (7, 33.333333333333336, 66.66666666666667, 133.33333333333334, 2.0),\n",
" (8, 29.166666666666668, 58.333333333333336, 116.66666666666667, 2.0),\n",
" (9, 25.925925925925927, 51.851851851851855, 103.70370370370371, 2.0),\n",
" (10, 23.333333333333336, 46.66666666666667, 93.33333333333334, 2.0),\n",
" (11, 21.212121212121215, 42.42424242424243, 84.84848484848486, 2.0),\n",
" (12, 19.444444444444446, 38.88888888888889, 77.77777777777779, 2.0),\n",
" (13, 17.94871794871795, 35.8974358974359, 71.7948717948718, 2.0),\n",
" (14, 16.666666666666668, 33.333333333333336, 66.66666666666667, 2.0),\n",
" (15, 15.555555555555555, 31.11111111111111, 62.22222222222222, 2.0),\n",
" (16, 14.583333333333334, 29.166666666666668, 58.333333333333336, 2.0),\n",
" (17, 13.725490196078432, 27.450980392156865, 54.90196078431373, 2.0),\n",
" (18, 12.962962962962964, 25.925925925925927, 51.851851851851855, 2.0),\n",
" (19, 12.280701754385966, 24.56140350877193, 49.12280701754386, 2.0),\n",
" (20, 11.666666666666668, 23.333333333333336, 46.66666666666667, 2.0),\n",
" (21, 11.11111111111111, 22.22222222222222, 44.44444444444444, 2.0),\n",
" (22, 10.606060606060607, 21.212121212121215, 42.42424242424243, 2.0),\n",
" (23, 10.144927536231885, 20.28985507246377, 40.57971014492754, 2.0),\n",
" (24, 9.722222222222223, 19.444444444444446, 38.88888888888889, 2.0),\n",
" (25, 9.333333333333334, 18.666666666666668, 37.333333333333336, 2.0),\n",
" (26, 8.974358974358974, 17.94871794871795, 35.8974358974359, 2.0),\n",
" (27, 8.641975308641976, 17.283950617283953, 34.567901234567906, 2.0),\n",
" (28, 8.333333333333334, 16.666666666666668, 33.333333333333336, 2.0),\n",
" (29, 8.045977011494253, 16.091954022988507, 32.18390804597701, 2.0),\n",
" (30, 7.777777777777778, 15.555555555555555, 31.11111111111111, 2.0),\n",
" (31, 7.526881720430108, 15.053763440860216, 30.107526881720432, 2.0),\n",
" (32, 7.291666666666667, 14.583333333333334, 29.166666666666668, 2.0),\n",
" (33, 7.070707070707071, 14.141414141414142, 28.282828282828284, 2.0),\n",
" (34, 6.862745098039216, 13.725490196078432, 27.450980392156865, 2.0),\n",
" (35, 6.666666666666667, 13.333333333333334, 26.666666666666668, 2.0),\n",
" (36, 6.481481481481482, 12.962962962962964, 25.925925925925927, 2.0),\n",
" (37, 6.306306306306307, 12.612612612612613, 25.225225225225227, 2.0),\n",
" (38, 6.140350877192983, 12.280701754385966, 24.56140350877193, 2.0),\n",
" (39, 5.982905982905983, 11.965811965811966, 23.931623931623932, 2.0)]"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# below follow examples and explanations on why the getcontrib() is doing how it is doing it\n",
"\n",
"# we want to draw some graphs\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# this graph below shows the max/avg/min contribs in case the backup budget is 0\n",
"# x is the number of members we have, while y is the max/avg/min contribution\n",
"plt.plot([getcontribs(members) for members in xrange(4,40)])\n",
"# we also list the numbers members/min/avg/max/weight for illustrative purposes\n",
"[(members,) + getcontribs(members) for members in xrange(4,40)]"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHRVJREFUeJzt3Xm4FNWZx/Hvy3LBDRAUFURwBTESFBCGiGkRFdwTNRqN\nGHxinJio42QUxclATOaJmsF9IYiaiGJcERglLtF2GZWByCaLgvuKo4iKGwjv/HHqSoN9ufdyq7uq\nu36f5+nnVncX1T/Le986ferUKXN3REQkG5olHUBERMpHRV9EJENU9EVEMkRFX0QkQ1T0RUQyREVf\nRCRD6i36ZrajmT1mZgvNbL6ZnV1knZPMbK6ZzTGzp81s79LEFRGRprD6xumb2fbA9u4+x8y2BP4B\nHO3uiwvWGQAscvePzWwoMMbdB5QyuIiINF6L+lZw9/eA96LllWa2COgMLC5Y57mCf/Jc9L6IiKRM\no/r0zawb0BuYsZHVfgZM3/RIIiJSKvW29GtFXTv3AOe4+8o61jkQGAHsH088ERGJU4OKvpm1IBT8\nie4+pY51egHjgaHu/lEd62iiHxGRTeDuFsd2Gtq9czOw0N2vKvamme0E3Auc4u4vb2xD7p76x+jR\noxPPoJzKWakZlTP+R5zqbemb2feAk4H5ZjYbcGAU0DXUcB8P/AZoD1xvZgasdvf9Yk0qIiJN1pDR\nO/8DNK9nndOB0+MKJSIipaErcovI5XJJR2gQ5YxXJeSshIygnGlW78VZsX6YmZfz80REqoGZ4WU+\nkSsiIlVARV9EJENU9EVEMkRFX0QkQ1T0RUQyREVfRCRDVPRFRDJERV9EJENU9EVEMkRFX0QkQ1T0\nRUQyREVfRCRDVPRFRDJERV9EJENU9EVEMkRFX0QkQ1T0RUQyREVfRCRDVPRFRDJERV9EJENU9EVE\nMkRFX0QkQ1T0RUQyREVfRCRDVPRFRDJERV9EJEPqLfpmtqOZPWZmC81svpmdXcd6V5vZEjObY2a9\n448qIiJN1aIB63wN/Ku7zzGzLYF/mNnD7r64dgUzGwbs6u67m1l/YBwwoDSRRURkU9Xb0nf399x9\nTrS8ElgEdN5gtaOBW6N1ZgBtzWy7mLOKiEgTNapP38y6Ab2BGRu81Rl4s+D523z7wCAiIglrcNGP\nunbuAc6JWvzrvV3kn3hTgomISPwa0qePmbUgFPyJ7j6lyCpvAV0Knu8IvFNsWxdeOIZWrcJyLpcj\n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\n0HnSAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# what does the weight do? a graphical explanation\n",
"tmc=int(math.ceil(total_monthly_costs))\n",
"steepness=2 # the higher the steeper the curve\n",
"\n",
"# x is the variable representing the backup_budget\n",
"# y is the weight we apply to the average_monthly_contrib variable in the graph below\n",
"plt.plot([1+(steepness**(backup_budget_max-x/float(tmc)))/steepness**backup_budget_max\n",
" for x in xrange(backup_budget_max*tmc)])"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"text/plain": [
"[(4, 29.280598958333336, 58.56119791666667, 117.12239583333334, 1.00390625),\n",
" (5, 23.424479166666668, 46.848958333333336, 93.69791666666667, 1.00390625),\n",
" (6, 19.520399305555557, 39.040798611111114, 78.08159722222223, 1.00390625),\n",
" (7, 16.731770833333336, 33.46354166666667, 66.92708333333334, 1.00390625),\n",
" (8, 14.640299479166668, 29.280598958333336, 58.56119791666667, 1.00390625),\n",
" (9, 13.013599537037038, 26.027199074074076, 52.05439814814815, 1.00390625),\n",
" (10, 11.712239583333334, 23.424479166666668, 46.848958333333336, 1.00390625),\n",
" (11, 10.647490530303031, 21.294981060606062, 42.589962121212125, 1.00390625),\n",
" (12, 9.760199652777779, 19.520399305555557, 39.040798611111114, 1.00390625),\n",
" (13, 9.009415064102564, 18.018830128205128, 36.037660256410255, 1.00390625),\n",
" (14, 8.365885416666668, 16.731770833333336, 33.46354166666667, 1.00390625),\n",
" (15, 7.808159722222222, 15.616319444444445, 31.23263888888889, 1.00390625),\n",
" (16, 7.320149739583334, 14.640299479166668, 29.280598958333336, 1.00390625),\n",
" (17, 6.8895526960784315, 13.779105392156863, 27.558210784313726, 1.00390625),\n",
" (18, 6.506799768518519, 13.013599537037038, 26.027199074074076, 1.00390625),\n",
" (19, 6.164336622807018, 12.328673245614036, 24.657346491228072, 1.00390625),\n",
" (20, 5.856119791666667, 11.712239583333334, 23.424479166666668, 1.00390625),\n",
" (21, 5.577256944444445, 11.15451388888889, 22.30902777777778, 1.00390625),\n",
" (22, 5.323745265151516, 10.647490530303031, 21.294981060606062, 1.00390625),\n",
" (23, 5.0922780797101455, 10.184556159420291, 20.369112318840582, 1.00390625),\n",
" (24, 4.880099826388889, 9.760199652777779, 19.520399305555557, 1.00390625),\n",
" (25, 4.684895833333334, 9.369791666666668, 18.739583333333336, 1.00390625),\n",
" (26, 4.504707532051282, 9.009415064102564, 18.018830128205128, 1.00390625),\n",
" (27, 4.33786651234568, 8.67573302469136, 17.35146604938272, 1.00390625),\n",
" (28, 4.182942708333334, 8.365885416666668, 16.731770833333336, 1.00390625),\n",
" (29, 4.038703304597702, 8.077406609195403, 16.154813218390807, 1.00390625),\n",
" (30, 3.904079861111111, 7.808159722222222, 15.616319444444445, 1.00390625),\n",
" (31, 3.778141801075269, 7.556283602150538, 15.112567204301076, 1.00390625),\n",
" (32, 3.660074869791667, 7.320149739583334, 14.640299479166668, 1.00390625),\n",
" (33, 3.5491635101010104, 7.098327020202021, 14.196654040404042, 1.00390625),\n",
" (34, 3.4447763480392157, 6.8895526960784315, 13.779105392156863, 1.00390625),\n",
" (35, 3.346354166666667, 6.692708333333334, 13.385416666666668, 1.00390625),\n",
" (36, 3.2533998842592595, 6.506799768518519, 13.013599537037038, 1.00390625),\n",
" (37, 3.165470157657658, 6.330940315315316, 12.661880630630632, 1.00390625),\n",
" (38, 3.082168311403509, 6.164336622807018, 12.328673245614036, 1.00390625),\n",
" (39, 3.0031383547008548, 6.0062767094017095, 12.012553418803419, 1.00390625)]"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n583zZcmzs/0tSceM0VBPSznn2Fmy0yf9vK9Yt2sd6wrWsX73etYVrGPdrnUkWEJN4g8dCPpn9GdA\n1wEM6Dq6PjnlAAAK90lEQVSA/l37a4JYghceXgofCMIHgPx8P4xUUFCzDLeIbcvLU6KPBiUl/lak\nOTn+LJ65c/19bseMqd00udt6nHMU7C2oPgCs27WO9bvWs2nPJjbu3sim3ZvYtGcTGZ0zahJ/6CDQ\nL6MfB2Uc5JddDqJXei+ViJCopaGbKOWcL0Myd25Nmz/fT/6PGeOLrh11lP8WoHLkbafKVbGjeAcb\nd2+sTv4bdm9gS+EWNu/ZzJY9W9hSuIVde3fRK70XB3U5yB8AuvgDQZ/0PvTp0qfWskvnLrrto7Qr\nJfoYUlnpK9GGk/7SpbBkiS+xfOSRNS18AOixzz26pK2UVZaRW5jrk3/hluoDQG5hLrlFoRZad87R\nt0vf6sTfO703vdJ60Su9V61l7/Te9EzrSXJSHN0ZRwKhRB8Htm/3SX/xYp/4wy0treZeFIce6tth\nh/mKnLorXXAKywqrk/7Wwq1sL9rOtqJtbC/e7ltRzXJH8Q5SO6XSK60XPdN60iOth1+m9qBHao99\n96X1oHtqd80rSC1K9HHKOX8h1/Ll/s50K1f6e1KsXOkLD/btW3MACN+HYsgQ3zJ1IkrUcM6xq3RX\nddLfWbLTL4t31qxH7NtRvIP8vfkkWiLdU7vXalkpWTXrqVlkpmSSlZJVaz0zJVO1ieKQEn0HVFHh\nx//DyX/VKp/8w6XJExNrkn5kGzTIFyLs2VNlRKKZc47i8mLySvIabPl78ynYW1CzLMknf28+u/bu\nIiUppTr5Z6Zk0i25W+1lSs12t5Ru1cuuyV3pmtyVLp27aGI6yijRSy3O+TO21q6t3das8d8QNm6E\n3bt9kcEBA2q3cNXZgw7y3xg0PBR7nHPsKdtDfok/AOwq3cWuvbuq1wv2FrBr766a9dJd7C7dza69\nfrm7dDdF5UV06dyFrsld6ZZccwDISM6ga2e/zOicUbMvuSsZnTOq92ckZ9ClcxcyOmeQ3jldB41W\noEQvTbZ3ry8mGE784bZpk19u3epbWlpNkcFw8o8sOhiuJ9Wrl78WROJDZVUlhWWF/gAQcSDYU7aH\nPaV72F26mz1loWXpHnaX7a61v7CskD2lfllcXkxap7Rayb9L5y61Wnqn9Jr1zum19qd3Tq93mdYp\n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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# how does the min/avg/max contribs look when we have x months of backup?\n",
"backup_budget = total_monthly_costs * 8\n",
"# this graph below shows the max/avg/min contribs\n",
"# x is the number of members we have, while y is the max/avg/min contribution\n",
"plt.plot([getcontribs(members) for members in xrange(4,40)])\n",
"# we also list the number of members/min/avg/max/weight for illustrative purposes\n",
"[(members,) + getcontribs(members) for members in xrange(4,40)]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.14"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment