├── LICENSE ├── .gitignore └── exercise_2 └── exercise_1.ipynb /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Enterprise Platform & Integration Concepts Research Group 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /exercise_2/exercise_1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Exercise 1\n", 8 | "\n", 9 | "### Data-Driven Demand Learning and Dynamic Pricing Strategies in Competitive Markets\n", 10 | "https://hpi.de/plattner/teaching/summer-term-2018/data-driven-demand-learning-and-dynamic-pricing-strategies.html" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 1, 16 | "metadata": { 17 | "collapsed": true 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "import random\n", 22 | "import numpy as np\n", 23 | "import pandas as pd\n", 24 | "\n", 25 | "import matplotlib.pyplot as plt\n", 26 | "\n", 27 | "seed = 17*17\n", 28 | "np.random.seed(seed)\n", 29 | "random.seed(seed)" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 2, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "K = 5 # number of players\n", 41 | "TT = 100 # time horizon\n", 42 | "M = TT + 100 # number of market reaction events. we create more event than the\n", 43 | " # horizon since we might end up short of 100 (e.g., avg of uniforms = 0.945)\n", 44 | "\n", 45 | "cc = 1; # mittlerer Abstand zwischen Kunden arrivals\n", 46 | "C = int(TT / cc + 100) # number of customer events" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "### Simulation Parameters (wann Kunden kommen und Firmen adjusten)" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 3, 59 | "metadata": { 60 | "collapsed": true 61 | }, 62 | "outputs": [], 63 | "source": [ 64 | "Dk = np.random.uniform(0.8, 1.2, (M, K)) # time between price adjustments of firm k\n", 65 | "tk = Dk # time of adjustments of firm k\n", 66 | "tk[0,:] = np.random.uniform(0, 1, K)\n", 67 | "for m in range(1, M):\n", 68 | " for k in range(K):\n", 69 | " tk[m, k] = tk[m - 1, k] + Dk[m, k]\n", 70 | "\n", 71 | "AT = tk.ravel() # set of price adjustments of all firms before time horizon TT\n", 72 | "AT = np.sort(np.unique(np.append(AT[ATNAT then 0 else member(i,AT); # Zeitpunkt der i-ten Preisanpassung\n", 77 | "tm = [0] * (NAT + 1) # Zeitpunkt der i-ten Preisanpassung\n", 78 | "for i in range(NAT):\n", 79 | " tm[i + 1] = AT[i]\n", 80 | "DM = [0] * NAT # time between adjustment events\n", 81 | "for i in range(NAT):\n", 82 | " DM[i] = tm[i+1] - tm[i]\n", 83 | "\n", 84 | "DC = np.random.exponential(size=C) * cc # waitung time between customer arrivals\n", 85 | "tc =[-1] * C # Zeitpunkt des Ankommens des c-ten Kundens\n", 86 | "for i in range(1, C):\n", 87 | " tc[i] = tc[i - 1] + DC[i]\n", 88 | "\n", 89 | "# param ZM {i in 1..NAT} := min{k in 1..K:sum{j in 1..M:tk[j,k]=tm[i]}1 = 1} k; \n", 90 | "ZM = [0] * NAT # firm k die beim i-ten Gesamtadjust adjusted\n", 91 | "for i, t in enumerate(tm):\n", 92 | " res = np.where(tk == t)\n", 93 | " if len(res[1]) > 0:\n", 94 | " ZM[i] = res[1][0]\n", 95 | "\n", 96 | "SC = np.zeros(shape=(C, K)) # paraemter for customer c scoring of firm k\n", 97 | "Zq = np.random.uniform(size = C) # customer c random scoring weight for quality\n", 98 | "# Zq = np.ones((C,), dtype=int) # helper for debugging\n", 99 | "Zr = np.random.uniform(0, 0.2, size = C) # customer c random scoring weight for rating\n", 100 | "\n", 101 | "ZC = np.zeros(C, dtype=int) # for decision of customer c" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "**A few plots**" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 4, 114 | "metadata": {}, 115 | "outputs": [ 116 | { 117 | "data": { 118 | "image/png": "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\n9NBDG/2U7HbcvUX+Bg0a5CJSnGXLljVqPqooWQwdO3Z0d/ctW7b46NGj/be//a2/+eabbmb+7LPP\n1pfr2bOn19XV+ZIlS/zggw/2uro6d3dft26du7ufe+65/uSTT7q7+1tvveWHHHLIdm198MEH/tFH\nH7m7+6uvvuqpvPHAAw/4scce61u3bvW3337bd999d7///vvd3X348OG+cOHCBrG6u99///0+btw4\nd3fv16+f19bWurv7e++95+7ud9xxh1922WX15SdNmuRHHHGEf/rpp15TU+MdOnTwuXPnurv7qaee\n6rNmzfJPP/3UDz/8cH/nnXfc3X369Ol+wQUX1McxceJEd3d/6KGHfOTIkRnbOeWUU/ypp55yd/dN\nmzb5li1btlsP8e0OVHsBOVZ9y4hIUT766CMqKiqAcOR+4YUXsnr1anr27MnQoUO3K//YY49x5pln\nstdeewGwxx57APDII480ODf+/vvvs2nTJjp16lQ/bsuWLUyYMKG+j/bUz/nNnz+fc889lzZt2rD3\n3ntzzDHHFLUMqa52zz777PpeHDM56aSTKCsro7y8nM8++6y+R8vy8nJWrlzJK6+8wpIlSzjuuOOA\n8EtP3bp1q58/VfegQYNYuXJl1lgmTpzIeeedx+mnn06PHj2KWpZslNxFpCipc+7psnWJ6+4Zf+R5\n27ZtPPvssxn7SE+58cYb6dq1K4sXL2bbtm20b9++flohPxwdLxPvcnfy5MksWLCAhx56iIqKiozL\nAw27Gi4rK6uvL97VcN++fbf7haf0+du0abPdz/WlXHXVVZx88snMnTuXoUOH8sgjj3DIIYfkXbZ8\ndM5dRJrVyJEjue++++r7Kl+/fj0Axx9/PLfcckt9uUwJduPGjXTr1o1ddtmFu+66q/4HLYYNG8b0\n6dP57LPPWLNmDY8//njGtrt27cry5cvZtm1b/a8lQeauduNdEBfqq1/9KnV1dfXJfcuWLRl/lCMu\nvZ3XX3+d8vJyrrzySiorK3n55ZeLiiEbJXeRncCk4aXp8rcx+vbty49+9COGDx/OgAEDmDhxIgA3\n33wz1dXV9O/fnz59+mx31w3ApZdeyrRp0xg6dCivvvpq/beD0047jYMOOojy8nK+9a1vbdf3e+oI\n+/rrr+eUU07hmGOOaXC65IorrqC8vJx+/foxbNgwBgwYwNFHH82yZcvqL3QWol27dsycOZMrr7yS\nAQMGUFFRUX/RN5v0dm666ab6i7sdOnTgpJNOKqjtfNTlr0groi5/8ysvL2fOnDnst99+LR1KyajL\nXxHZqR133HGUl5cnKrE3li6oikhiPPzwwy0dwg4j75G7me1jZo+b2XIzW2pm381QZoSZbTSzmujv\nmuYJV0REClHIkftW4N/d/QUz6wQsMrOH3T2984Yn3f2U0ocoInHZbi2UZGrsddG8R+7uvsbdX4he\nbwKWA90b1ZqINEn79u1Zt25do9/w0rq4O+vWrWtwf3+hijrnbma9gEOBBRkmH25mi4HVwPfdPffN\nniJStB49elBbW0tdXV1LhyKfk/bt2zfqqdWCk7uZ7QY8AFzu7u+nTX4B6Onum81sFDAbOChDHRcD\nFwPsu+++RQcrsrMrKyvTnSBSkIJuhTSzMkJiv8fdH0yf7u7vu/vm6PVcoMzM9spQ7jZ3r3T3yi5d\nujQxdBERyaaQu2UMuB1Y7u6/zlLmK1E5zOywqN51pQxUREQKV8hpmSOArwMvmVmq84cfAvsCuPtk\n4EzgW2a2FfgIGOu64iMi0mLyJnd3fwrIed+Vu98C3JKrjIiIfH7U/YCISAIpuYuIJJCSu4hIAim5\ni4gkkJK7iEgCKbmLiCSQkruISAIpuYuIJJCSu4hIAim5i4gkkJK7iEgCKbmLiCSQkruISAIpuYuI\nJJCSu4hIAim5i4gkkJK7iEgCKbmLiCSQkruISAIpuYuIJJCSu4hIAim5i4gkkJK7iEgCKbmLiCSQ\nkruISAIpuYuIJJCSu4hIAim5i4gkUN7kbmb7mNnjZrbczJaa2XczlDEzu9nMVpjZi2Y2sHnCjVRV\nhb/0cZnKZRuXaVpLaEwchSx7c7TbkuLxFrr9i6230DJNbavQfTXTPIW2na++QsoWU2+pNVc7I0YU\n1+6IEcWtyx2IuXvuAmbdgG7u/oKZdQIWAae6+7JYmVHAt4FRwBDgv919SK56Kysrvbq6upFRW/gf\nj92s4XC+cZmmtYTGxJE+Tynq2NHF4y10+xdbb6FlmtpWoftqpnkKbTtffYWULabeUmuudvLVm2lb\nQ+Hr8nNgZovcvTJfubxH7u6+xt1fiF5vApYD3dOKjQHu9OA5oHP0oSAiIi2gqHPuZtYLOBRYkDap\nO7AqNlzL9h8AmNnFZlZtZtV1dXXFRSoiIgUrOLmb2W7AA8Dl7v5++uQMs2z3fcXdb3P3Snev7NKl\nS3GRiohIwQpK7mZWRkjs97j7gxmK1AL7xIZ7AKubHp6IiDRG23wFzMyA24Hl7v7rLMXmABPMbDrh\ngupGd19TujDTTJrU9HGZprWExsSRPk8p6tjRxeMtdFsXW2+hZZraVjHxp89TaNv56iukbDH1llpz\ntTN8eHHtDh+e/Q6bHfw9VMiSOwoaAAAL10lEQVTdMkcCTwIvAdui0T8E9gVw98nRB8AtwInAh8AF\n7p7zVpgm3S0jIrKTKvRumbxH7u7+FJnPqcfLOHBZ4eGJiEhz0hOqIiIJpOQuIpJASu4iIgmk5C4i\nkkBK7iIiCaTkLiKSQEruIiIJpOQuIpJASu4iIgmk5C4ikkBK7iIiCaTkLiKSQEruIiIJpOQuIpJA\nSu4iIgmk5C4ikkBK7iIiCaTkLiKSQEruIiIJpOQuIpJASu4iIgmk5C4ikkBK7iIiCaTkLiKSQEru\nIiIJpOQuIpJASu4iIgmUN7mb2R/M7B0zW5Jl+ggz22hmNdHfNaUPU0REitG2gDJTgVuAO3OUedLd\nTylJRCIi0mR5j9zdfT6w/nOIRURESqRU59wPN7PFZvYXM+ubrZCZXWxm1WZWXVdXV6KmRUQkXSmS\n+wtAT3cfAPwGmJ2toLvf5u6V7l7ZpUuXEjQtIiKZNDm5u/v77r45ej0XKDOzvZocmYiINFqTk7uZ\nfcXMLHp9WFTnuqbWKyIijZf3bhkz+yMwAtjLzGqBSUAZgLtPBs4EvmVmW4GPgLHu7s0WsYiI5JU3\nubv7uXmm30K4VVJERHYQekJVRCSBlNxFRBJIyV1EJIGU3EVEEkjJXUQkgZTcRUQSSMldRCSBlNxF\nRBJIyV1EJIGU3EVEEkjJXUQkgZTcRUQSSMldRCSBlNxFRBJIyV1EJIGU3EVEEkjJXUQkgZTcRUQS\nSMldRCSBlNxFRBJIyV1EJIGU3EVEEkjJXUQkgZTcRUQSSMldRCSBlNxFRBJIyV1EJIHyJncz+4OZ\nvWNmS7JMNzO72cxWmNmLZjaw9GE2TtW8KkZMHUHVvKoG49JfV82rqv9LLxMvm/obMXVEznZT03vd\n1CtnbKkymdqL15WqL1u51DLGlyFbe/H48y1npvWR/jo1nL5O0sulb4ds9aav30wxpK/XXMsdL5tt\nOeJ15FrmbNPT4y2mjkxlMi1/eoy5tl229jLFm227ZJsnU/3ZljFfmVxxZls32ebN9J5M30a51ltc\n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\n", 119 | "text/plain": [ 120 | "" 121 | ] 122 | }, 123 | "metadata": {}, 124 | "output_type": "display_data" 125 | } 126 | ], 127 | "source": [ 128 | "tc_plot = np.array(tc)\n", 129 | "tm_plot = np.array(tm)\n", 130 | "plot_limit = 30\n", 131 | "plt.plot(tc_plot[tc_plot 0:\n", 772 | " did_customer_arrive = '-'\n", 773 | " print(\"\\n {:5.2f} - {:5.2f} {}:\\t\".format(tm[i], tm[i+1], did_customer_arrive), end='')\n", 774 | " for k in range(K):\n", 775 | " sale_cnt = sum([1 if ((tm[i] <= tc[c] < tm[i+1]) and k == ZC[c]) else 0 for c in range(C)])\n", 776 | " merchant_sold = ' '\n", 777 | " if sale_cnt > 0:\n", 778 | " merchant_sold = str('*' * sale_cnt)\n", 779 | " print(\"{:>3}{:5.1f} ({:6.2f}) \".format(merchant_sold, p[k], G[k]/T), end='')\n", 780 | "\n", 781 | " \n", 782 | " if T < TT: # Preisanpassungen der Firmen (je nach dem wer dran ist)\n", 783 | " price = 0.0\n", 784 | "\n", 785 | " if ZM[i] == 0: # strategy firm 1\n", 786 | " if random.random() < 0.1:\n", 787 | " price = round(random.random() * 15, 2)\n", 788 | " else:\n", 789 | " # 0% Anteil price exploration\n", 790 | " if p[ZM[i]] < 5:\n", 791 | " price = 10\n", 792 | " else:\n", 793 | " merchs = set([k for k in range(K)])\n", 794 | " merchs.remove(ZM[i]) # all merchants without the currently adjusting\n", 795 | " price = min([max(4.9, p[k]-0.5) for k in merchs])\n", 796 | " elif ZM[i] == 1: # strategy firm 2\n", 797 | " if p[ZM[i]] < 4:\n", 798 | " price = 9\n", 799 | " else:\n", 800 | " merchs = set([k for k in range(K)])\n", 801 | " merchs.remove(ZM[i]) # all merchants without the currently adjusting\n", 802 | " price = min([max(3.9, p[k]-0.5) for k in merchs])\n", 803 | " elif ZM[i] == 2: # strategy firm 3\n", 804 | " if p[ZM[i]] < 6:\n", 805 | " price = 12\n", 806 | " else:\n", 807 | " merchs = set([k for k in range(K)])\n", 808 | " merchs.remove(ZM[i]) # all merchants without the currently adjusting\n", 809 | " price = min([max(5.9, p[k]-0.5) for k in merchs])\n", 810 | " elif ZM[i] == 3: # strategy firm 4\n", 811 | " price = 11\n", 812 | " else: # strategy firm 5\n", 813 | " price = 13\n", 814 | "\n", 815 | " p[ZM[i]] = price\n", 816 | "\n", 817 | " p_history[i, ] = p" 818 | ] 819 | }, 820 | { 821 | "cell_type": "code", 822 | "execution_count": 8, 823 | "metadata": {}, 824 | "outputs": [ 825 | { 826 | "name": "stdout", 827 | "output_type": "stream", 828 | "text": [ 829 | "Assigned static qualities for merchants: [4, 2, 1, 5, 5]\n" 830 | ] 831 | }, 832 | { 833 | "data": { 834 | "image/png": "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\n", 835 | "text/plain": [ 836 | "" 837 | ] 838 | }, 839 | "metadata": {}, 840 | "output_type": "display_data" 841 | }, 842 | { 843 | "data": { 844 | "image/png": "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\nA/6z4TP6OJnRAAAAAElFTkSuQmCC\n", 845 | "text/plain": [ 846 | "" 847 | ] 848 | }, 849 | "metadata": {}, 850 | "output_type": "display_data" 851 | } 852 | ], 853 | "source": [ 854 | "%matplotlib inline\n", 855 | "# %matplotlib notebook\n", 856 | "\n", 857 | "plt_profit = pd.DataFrame(G).plot(kind='bar')\n", 858 | "plt_profit.set_title(\"Overall profit for competing merchants\")\n", 859 | "plt_profit.set_ylabel(\"Profit\")\n", 860 | "plt_profit.set_xlabel(\"Merchant\")\n", 861 | "plt_profit.legend_.remove()\n", 862 | "\n", 863 | "plt_acc_profit = pd.DataFrame(G_acc).plot()\n", 864 | "plt_acc_profit.set_ylabel(\"Accumulated Profit\")\n", 865 | "plt_acc_profit.set_xlabel(\"Time\")\n", 866 | "plt_acc_profit.set_title(\"Accumulated profit over time for competing merchants\")\n", 867 | "\n", 868 | "print(f'Assigned static qualities for merchants: {list(map(int, q))}')" 869 | ] 870 | }, 871 | { 872 | "cell_type": "code", 873 | "execution_count": 9, 874 | "metadata": {}, 875 | "outputs": [ 876 | { 877 | "data": { 878 | "image/png": "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\necqhkpktlfRGSU9Kus7dR6Ri0pN0bfsiy0bV+KUumf9SX4S9ko5L2iXpfyT92t3PlzY5rIB/yFWP\n393L8/+3pfn/ezObmXYcJPR0fUHSayWtljQi6fPtDSddZna5pG9J+mt3H293PFmrMf6umX93v+Du\nqyUtkXSTpNfV2izbqLJTPX4zu1HSxyWtlPR7kuZJSv10Iwk9Re5+rDTRL0v6FxVf6EEqnTv8lqSv\nuvu3Sw8fK51fLp9nPt6u+NJWa/zdNP9l7v5rFavG3yzpKjMrV6MvkfSrdsWVlYrxrymdinN3Pyup\nXxnMPwk9ReVkVvKnkvZNtW2elf4o9CVJz7j731V867uS7ix9fqek7VnHloWpxt9F87/AzK4qff5K\nSe9S8e8Ij0taX9os5PmvNf4DFYsZU/HvB6nPP1e5tIiZPSrpHSreZe2YpPtLX69W8VfNQ5LuLp9T\nDomZvU3SjyUN6mKzk0+oeB75G5JukPS8pF53D+4Px3XGf7u6Y/7foOIfPS9TcZH4DXffbGbLVLy1\n9jxJP5P0wdJqNSh1xv+fkhZIMkl7JX244o+n6cRCQgeAMHDKBQACQUIHgECQ0AEgECR0AAgECR0A\nAkFCB4BAkNABIBAkdAAIxP8DCdMhXdCJDCwAAAAASUVORK5CYII=\n", 879 | "text/plain": [ 880 | "" 881 | ] 882 | }, 883 | "metadata": {}, 884 | "output_type": "display_data" 885 | } 886 | ], 887 | "source": [ 888 | "# %matplotlib notebook\n", 889 | "\n", 890 | "for k in range(K):\n", 891 | " plt.step(tm[60:180], p_history[60-1:180-1, k]) # len(tm) == 1 + len(p_hist)\n", 892 | " # selecting 40-180 since it shows nice trajectories\n", 893 | "plt.legend()\n", 894 | "plt.show()" 895 | ] 896 | }, 897 | { 898 | "cell_type": "markdown", 899 | "metadata": {}, 900 | "source": [ 901 | "# Demand Learning" 902 | ] 903 | }, 904 | { 905 | "cell_type": "code", 906 | "execution_count": 10, 907 | "metadata": { 908 | "collapsed": true 909 | }, 910 | "outputs": [], 911 | "source": [ 912 | "# TODO exercise 2: create a vector that stores the sales of a given merchant\n", 913 | "# (and only these) in a binary vector (for now, apply min(1,v))\n", 914 | "# TODO exercise 2: Create feature vectors as shown in the lecture.\n", 915 | "# TODO exercise 2: Use sklearn.linear_model.LogisticRegression to estimate the sales probabilities" 916 | ] 917 | }, 918 | { 919 | "cell_type": "code", 920 | "execution_count": 11, 921 | "metadata": { 922 | "collapsed": true 923 | }, 924 | "outputs": [], 925 | "source": [ 926 | "# TODO exercise 2: plot two graphs\n", 927 | " # (i) a graph showing the probabilities to sell (y-axis) with\n", 928 | " # varying own prices (x-axis) for a given situation \n", 929 | " # (ii) a graph showing the expected profit (y-axis) with\n", 930 | " # varying own prices (x-axis) for a given situation\n", 931 | "# As the given situation, consider five merchants (own rating = 90, own quality = 2):\n", 932 | " # (i) price = 8, rating = 95, quality = 2\n", 933 | " # (ii) price = 10, rating = 85, quality = 3\n", 934 | " # (iii) price = 12, rating = 80, quality = 1\n", 935 | " # (iv) price = 8.05, rating = 99, quality = 4\n", 936 | " # (v) price = 9.9, rating = 70, quality = 2" 937 | ] 938 | }, 939 | { 940 | "cell_type": "code", 941 | "execution_count": 12, 942 | "metadata": { 943 | "collapsed": true 944 | }, 945 | "outputs": [], 946 | "source": [ 947 | "# TODO exercise 2 - BONUS: calculate LL, AIC, and McFadden Pseudo R-squared" 948 | ] 949 | } 950 | ], 951 | "metadata": { 952 | "kernelspec": { 953 | "display_name": "Python 3", 954 | "language": "python", 955 | "name": "python3" 956 | }, 957 | "language_info": { 958 | "codemirror_mode": { 959 | "name": "ipython", 960 | "version": 3 961 | }, 962 | "file_extension": ".py", 963 | "mimetype": "text/x-python", 964 | "name": "python", 965 | "nbconvert_exporter": "python", 966 | "pygments_lexer": "ipython3", 967 | "version": "3.6.3" 968 | } 969 | }, 970 | "nbformat": 4, 971 | "nbformat_minor": 2 972 | } 973 | --------------------------------------------------------------------------------