Skip to content

Instantly share code, notes, and snippets.

@asberk
Last active March 2, 2017 22:21
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save asberk/0b06339bd1879aa6c476391f57279812 to your computer and use it in GitHub Desktop.
Airline_prices_with_fussy_customers.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"toc": "true"
},
"cell_type": "markdown",
"source": "# Table of Contents\n <p><div class=\"lev1 toc-item\"><a href=\"#Problem-set-up\" data-toc-modified-id=\"Problem-set-up-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Problem set-up</a></div><div class=\"lev1 toc-item\"><a href=\"#Analysis\" data-toc-modified-id=\"Analysis-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Analysis</a></div><div class=\"lev2 toc-item\"><a href=\"#Specific-cases\" data-toc-modified-id=\"Specific-cases-21\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Specific cases</a></div><div class=\"lev2 toc-item\"><a href=\"#Best-daily-prices\" data-toc-modified-id=\"Best-daily-prices-22\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>Best daily prices</a></div><div class=\"lev1 toc-item\"><a href=\"#Python-Solution\" data-toc-modified-id=\"Python-Solution-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Python Solution</a></div><div class=\"lev2 toc-item\"><a href=\"#Package-imports\" data-toc-modified-id=\"Package-imports-31\"><span class=\"toc-item-num\">3.1&nbsp;&nbsp;</span>Package imports</a></div><div class=\"lev2 toc-item\"><a href=\"#Define-$\\mathrm{Pr}(X-&lt;-p)$-for-$X-\\sim-\\mathrm{Unif}(0,-M)$\" data-toc-modified-id=\"Define-$\\mathrm{Pr}(X-<-p)$-for-$X-\\sim-\\mathrm{Unif}(0,-M)$-32\"><span class=\"toc-item-num\">3.2&nbsp;&nbsp;</span>Define $\\mathrm{Pr}(X &lt; p)$ for $X \\sim \\mathrm{Unif}(0, M)$</a></div><div class=\"lev2 toc-item\"><a href=\"#Maximum-expected-lazy-revenue\" data-toc-modified-id=\"Maximum-expected-lazy-revenue-33\"><span class=\"toc-item-num\">3.3&nbsp;&nbsp;</span>Maximum expected lazy revenue</a></div><div class=\"lev3 toc-item\"><a href=\"#Summary\" data-toc-modified-id=\"Summary-331\"><span class=\"toc-item-num\">3.3.1&nbsp;&nbsp;</span>Summary</a></div><div class=\"lev2 toc-item\"><a href=\"#Maximum-Expected-Revenue\" data-toc-modified-id=\"Maximum-Expected-Revenue-34\"><span class=\"toc-item-num\">3.4&nbsp;&nbsp;</span>Maximum Expected Revenue</a></div><div class=\"lev3 toc-item\"><a href=\"#Summary\" data-toc-modified-id=\"Summary-341\"><span class=\"toc-item-num\">3.4.1&nbsp;&nbsp;</span>Summary</a></div>"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# Problem set-up"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The set-up is as follows. An airline has $s$ seats remaining and $n$ days left to sell seats. On each day $j \\geq 1$ a single customer $X_j$ comes in with a \"willingness to pay\" of $\\theta_j \\sim \\mathrm{Unif}(0, M)$. The price set by the airline on that day is denoted $p_j$. If $\\theta_j \\geq p_j$ then the customer buys a ticket for the seat; otherwise, the potential customer chooses another airline. "
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# Analysis"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Thus, we may define a function representing revenue from day $j$ onwards, $R_j(s,n)$, recursively as follows:\n$$\nR_1(s,n) = \\begin{cases}\np_1 + R_2(s-1, n-1) & \\theta_1 \\geq p_1\\\\\nR_2(s, n-1) & \\theta_1 < p_1\n\\end{cases}\n$$\nwhere $R_j(s, 0) = 0$ for all $j,s \\geq 0$ and $R_j(0, n) = 0$ for all $j,n \\geq 0$.\nTaking expectations thereby yields the recursion\n$$\n\\mathbb{E} R_1(s,n) = \\mathrm{Pr}(\\theta_1 \\geq p_1)(p_1 + \\mathbb{E} R_2(s-1, n-1)) + \\mathrm{Pr}(\\theta_1 < p_1) \\mathbb{E} R_2(s, n-1)\n$$\nIn particular, since $\\theta_j \\sim \\mathrm{Unif}(0,M)$,\n$$\n\\mathbb{E} R_1(s,n) = \\frac{M-p_1}{M}(p_1 + \\mathbb{E} R_2(s-1, n-1)) + \\frac{p_1}{M} \\mathbb{E} R_2(s, n-1)\n$$\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Specific cases"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In the case for $\\mathbb{E} R_1(1,1)$,\n$$\n\\mathbb{E} R_1(1,1) = \\mathrm{P}\\,(\\theta_1 \\geq p_1)(p_1 + \\mathbb{E} R_2(0,0)) + \\mathrm{P}\\, (\\theta_1 < p_1) \\mathbb{E} R_2(1, 0) = p_1 \\frac{M-p_1}{M}\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In the case $\\mathbb{E} R_1(1,2)$, \n$$\n\\mathbb{E} R_1(1,2) = p_1 \\frac{M-p_1}{M} + \\frac{p_1}{M} \\mathbb{E} R_2(1,1) = p_1 \\frac{M-p_1}{M} + \\frac{p_1}{M} p_2 \\frac{M-p_2}{M}\n$$\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In the case $\\mathbb{E} R_1(2,2)$, we get a nice simplification. This is because the number of possible sales are no longer constrained by the number of remaining seats. \n$$\n\\mathbb{E} R_2(2,2) = p_2 \\frac{M-p_2}{M} + p_3 \\frac{M-p_3}{M}\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Best daily prices"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "To find daily prices corresponding to maximal revenue, we can use calculus.\n$$\n0 = \\frac{\\partial}{\\partial p_1} \\mathbb{E} R_1(s, n) = M - 2p_1 - \\mathbb{E} R_2(s-1, n-1)) + \\mathbb{E} R_2(s, n-1)\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$p_1 = \\frac{1}{2} \\big[ M - \\mathbb{E} R_2 (s-1, n-1) + \\mathbb{E} R_2(s, n-1)\\big]$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In the particular case of $\\mathbb{E} R_1(2,3)$ we can use the derivations from the specific cases above to see that\n$$\np_1 = \\frac{1}{2} \\big[ M - \\mathbb{E} R_2(1, 2) + \\mathbb{E} R_2(2, 2) \\big] = \\frac{M}{2} \\big[1 - \\frac{p_3}{M}\\frac{M-p_2}{M}\\frac{M-p_3}{M}\\big]\n$$\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This suggests that knowing the ideal price for day one implies having to know the ideal price for the next two days as well! But again, there's a nice simplification that comes about for day 3. "
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n\\mathbb{E} R_1(2,3) = \\frac{M-p_1}{M}(p_1 + p_2 \\frac{M-p_2}{M} + \\frac{p_2}{M} p_3 \\frac{M-p_3}{M}) + \\frac{p_1}{M} (p_2 \\frac{M-p_2}{M} + p_3 \\frac{M-p_3}{M})\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n0 = \\frac{\\partial}{\\partial p_3} \\mathbb{E} R_1(2,3) = \\frac{M-p_1}{M}\\frac{p_2}{M}(\\frac{M-p_3}{M} - \\frac{p_3}{M}) + \\frac{p_1}{M}(\\frac{M-p_3}{M} - \\frac{p_3}{M})\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n\\implies \\quad M - 2p_3 = 0 \\quad \\implies \\quad p_3 = M/2\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Unfortunately, not so much for price $p_2$; however, we do see a symmetry with $p_1$ emerge:"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n0 = \\frac{\\partial}{\\partial p_2} \\mathbb{E} R_1(2,3) = \\frac{M-p_1}{M}(\\frac{M-2p_2}{M} + p_3 \\frac{M- p_3}{M}) + \\frac{p_1}{M}\\frac{M- 2p_2}{M}\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\np_2 = \\frac{M}{2} \\big[ 1 + \\frac{p_3}{M}\\frac{M-p_1}{M}\\frac{M-p_3}{M}\\big]\n$$"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# Python Solution"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Okay, so maybe it's hard to solve analytically. I'm on a computer, so let's write some code and solve it that way. First we'll set up the easy case: assume that the airline is only allowed to set one price at the start and that all prices for consecutive days are the same as the day one price."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Package imports"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "import numpy as np\nimport matplotlib.pyplot as plt\n%matplotlib inline",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "from scipy.optimize import minimize",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Define $\\mathrm{Pr}(X < p)$ for $X \\sim \\mathrm{Unif}(0, M)$"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def PrUnif(p, M=100.):\n # Pr(price < p), where price ~ Unif(1,M)\n return max(0., min(1., p/M))",
"execution_count": 3,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Maximum expected lazy revenue"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In particular, we're looking for the maximum expected *lazy* revenue. This is the situation when the prices $p_j$ on each day $j \\geq 1$ are equal to some $p \\in [0, M]$ (*i.e.*, the airline sets one price at the beginning and does not change it). "
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def ExpectedLazyRevenue(s, n, p):\n if n == 0:\n return 0\n if s == 0:\n return 0\n elif s == n:\n return (1-PrUnif(p))*p*n\n elif s == 1:\n return (1-PrUnif(p))*p + PrUnif(p)*ExpectedLazyRevenue(s, n-1, p)\n elif s > 1:\n return (1-PrUnif(p))*(p + ExpectedLazyRevenue(s-1, n-1, p)) + PrUnif(p)*(ExpectedLazyRevenue(s, n-1, p))\n if (s < 0) or (n < 0):\n raise ValueError('s, n must be nonnegative.')\n print('There was an extra case that was not considered')\n return",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "prices = np.linspace(0, 100, 201)\nELR = [ExpectedLazyRevenue(2,3,p) for p in prices]\nj_max, p_max = next((j,p) for j, p in enumerate(prices) if ELR[j] == max(ELR))\nprint('The price that gives maximum expected revenue for 2 seats, 3 passengers ' +\n 'is p_max = $%2d with an expected revenue of $%5.3f.' % (p_max, ELR[j_max]))",
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": "The price that gives maximum expected revenue for 2 seats, 3 passengers is p_max = $54 with an expected revenue of $69.264.\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(prices, ELR)",
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x1130c5828>]"
},
"metadata": {},
"execution_count": 6
},
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x110dcc5c0>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "prices = np.linspace(0, 100, 201)\nELR2 = [ExpectedLazyRevenue(4,9,p) for p in prices]\nj_max, p_max = next((j,p) for j, p in enumerate(prices) if ELR2[j] == max(ELR2))\nprint('The price that gives maximum expected revenue for 4 seats, 9 passengers ' +\n 'is p_max = $%2d with an expected revenue of $%5.3f.' % (p_max, ELR2[j_max]))",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "The price that gives maximum expected revenue for 4 seats, 9 passengers is p_max = $60 with an expected revenue of $192.299.\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(prices, ELR2);",
"execution_count": 8,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x1130e77f0>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "# set up function for \"minimization\"\ndef f_lazy_4_9(c):\n return -ExpectedLazyRevenue(4, 9, c)\n# from scipy.optimize\nmax_lazy_4_9 = minimize(f_lazy_4_9, 0)\n# print results from optimization\nmax_lazy_4_9",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": " fun: -192.29892607998875\n hess_inv: array([[ 4.30300236]])\n jac: array([ -3.81469727e-06])\n message: 'Optimization terminated successfully.'\n nfev: 36\n nit: 6\n njev: 12\n status: 0\n success: True\n x: array([ 59.98670427])"
},
"metadata": {},
"execution_count": 9
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The results of the numerical optimization match the results of the brute-force optimization!"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Summary"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If you're only allowed to set one price for all customers, then it's better to be a little greedy."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Maximum Expected Revenue"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def ExpectedRevenue(s, n, p):\n # s = number seats remaining\n # n = number of people remaining\n # p = scheduled prices (list)\n if len(p) < n:\n print(('s = %d; n = %d; p = {}' % (s,n)).format(p))\n raise ValueError('not enough prices scheduled')\n if n == 0:\n return 0 \n if s == 0:\n return 0\n elif s == n:\n return sum([(1-PrUnif(pj))*pj for pj in p])\n elif s == 1:\n return (1-PrUnif(p[0]))*p[0] + PrUnif(p[0])*ExpectedRevenue(s, n-1, p[1:])\n elif s > 1:\n return (1-PrUnif(p[0]))*(p[0] + ExpectedRevenue(s-1, n-1, p[1:])) + PrUnif(p[0])*ExpectedRevenue(s, n-1, p[1:])\n if (s < 0) or (n < 0):\n raise ValueError('s, n must be nonnegative')\n print('There was an extra case that was not considered')\n return",
"execution_count": 10,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def f_2_3(c):\n return -ExpectedRevenue(2,3,tuple(c))\ndef f_4_9(c):\n return -ExpectedRevenue(4,9,tuple(c))",
"execution_count": 11,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "max_2_3 = minimize(f_2_3, [0,0,0])",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "max_4_9 = minimize(f_4_9, [0 for _ in range(9)])",
"execution_count": 13,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "max_2_3",
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": " fun: -69.44444444436357\n hess_inv: array([[ 22.69558604, 21.69558923, -0.13935876],\n [ 21.69558923, 22.69559241, -0.13935408],\n [ -0.13935876, -0.13935408, 60.98908397]])\n jac: array([ 0.00000000e+00, 0.00000000e+00, -1.90734863e-06])\n message: 'Optimization terminated successfully.'\n nfev: 65\n nit: 9\n njev: 13\n status: 0\n success: True\n x: array([ 55.55557681, 55.55557922, 49.99990694])"
},
"metadata": {},
"execution_count": 14
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "max_4_9",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": " fun: -193.3001942136841\n hess_inv: array([[ 1.02544632e+01, 9.25450021e+00, 9.25445362e+00,\n 9.25436554e+00, -2.92490231e+00, -2.06725896e+00,\n -1.06949966e+00, -7.91923215e-04, 6.36126881e-01],\n [ 9.25450021e+00, 1.02545372e+01, 9.25449054e+00,\n 9.25440248e+00, -2.92459616e+00, -2.06746546e+00,\n -1.06971537e+00, -5.55649956e-04, 6.36243913e-01],\n [ 9.25445362e+00, 9.25449054e+00, 1.02544436e+01,\n 9.25435552e+00, -2.92926606e+00, -2.06212461e+00,\n -1.06847335e+00, -4.64971759e-03, 6.38031908e-01],\n [ 9.25436554e+00, 9.25440248e+00, 9.25435552e+00,\n 1.02542673e+01, -2.92728258e+00, -2.06576395e+00,\n -1.06653966e+00, -4.23738557e-03, 6.36973481e-01],\n [ -2.92490231e+00, -2.92459616e+00, -2.92926606e+00,\n -2.92728258e+00, 4.83380510e+01, -1.24250426e+00,\n -6.22849717e+00, -1.73681632e+00, -2.38515125e+00],\n [ -2.06725896e+00, -2.06746546e+00, -2.06212461e+00,\n -2.06576395e+00, -1.24250426e+00, 4.75243285e+01,\n 8.15525376e-01, -4.00487690e+00, 8.95799994e-01],\n [ -1.06949966e+00, -1.06971537e+00, -1.06847335e+00,\n -1.06653966e+00, -6.22849717e+00, 8.15525376e-01,\n 5.77119195e+01, 3.23371776e+00, 3.71847157e+00],\n [ -7.91923215e-04, -5.55649956e-04, -4.64971759e-03,\n -4.23738557e-03, -1.73681632e+00, -4.00487690e+00,\n 3.23371776e+00, 7.31287738e+01, 4.78994069e+00],\n [ 6.36126881e-01, 6.36243913e-01, 6.38031908e-01,\n 6.36973481e-01, -2.38515125e+00, 8.95799994e-01,\n 3.71847157e+00, 4.78994069e+00, 8.07786970e+01]])\n jac: array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n 0.00000000e+00, 3.81469727e-06, -7.62939453e-06,\n 3.81469727e-06, -3.81469727e-06, 0.00000000e+00])\n message: 'Optimization terminated successfully.'\n nfev: 517\n nit: 43\n njev: 47\n status: 0\n success: True\n x: array([ 61.90359091, 61.90357841, 61.90358505, 61.90353166,\n 61.45985359, 60.28673608, 58.19128927, 54.91374048, 49.99988969])"
},
"metadata": {},
"execution_count": 15
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Summary"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(max_2_3.x, '.', markersize=10)\nplt.xlabel('Day');\nplt.ylabel('Price');\nplt.title('Seats remaining: 2; Days left in sale: 3')\nplt.ylim([48, 67]);\nplt.xticks([-.1, 0,1,2, 2.1], ['',0,1,2,'']);",
"execution_count": 16,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x1134b96d8>",
"image/png": "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\ngg==\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(max_4_9.x, '.', markersize=10)\nplt.xlabel('Day');\nplt.ylabel('Price');\nplt.title('Seats remaining: 4; Days left in sale: 9')\nplt.ylim([48, 67]);\nplt.xticks([-.1]+[j for j in range(9)]+[8.1], ['']+[j for j in range(9)]+['']);",
"execution_count": 17,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x11340fb38>",
"image/png": "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\n"
},
"metadata": {}
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"toc": {
"threshold": 4,
"number_sections": true,
"toc_cell": true,
"toc_window_display": false,
"toc_section_display": "block",
"sideBar": true,
"navigate_menu": true,
"nav_menu": {
"width": "252px",
"height": "210px"
}
},
"language_info": {
"version": "3.5.2",
"file_extension": ".py",
"codemirror_mode": {
"version": 3,
"name": "ipython"
},
"mimetype": "text/x-python",
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"name": "python"
},
"gist": {
"id": "0b06339bd1879aa6c476391f57279812",
"data": {
"description": "Airline_prices_with_fussy_customers.ipynb",
"public": true
}
},
"_draft": {
"nbviewer_url": "https://gist.github.com/0b06339bd1879aa6c476391f57279812"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment