{ "cells": [ { "cell_type": "markdown", "id": "d3369ec9", "metadata": {}, "source": [ "## Google and the Innovators Dilemma" ] }, { "cell_type": "code", "execution_count": null, "id": "3bf87a2f", "metadata": {}, "outputs": [], "source": [ "# Imports\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "id": "90d453be", "metadata": {}, "outputs": [], "source": [ "# Assumptions\n", "margin = 0.6\n", "discount_rate = 0.10 # 10% discount rate\n", "years = 20 # Time horizon\n", "\n", "# Parameters\n", "\n", "annual_revenue = 195e9 # Google Search 2024 Revenue\n", "\n", "# Net Present Value Calculations in Python\n", "\n", "# --- Parameters ---\n", "cash_flow = annual_revenue * margin\n", "\n", "print(f\"With an assumed margin of {(margin*100):.2f}% Google Search has an annual net income of ${cash_flow/1e9:,.0f}B.\")\n" ] }, { "cell_type": "code", "execution_count": null, "id": "893638c9", "metadata": {}, "outputs": [], "source": [ "# --- Annuity Formula (constant cash flow) ---\n", "# NPV = C * [(1 - (1 + r)^-n) / r]\n", "\n", "npv_annuity = cash_flow * ((1 - (1 + discount_rate) ** -years) / discount_rate)\n", "\n", "print(f\"NPV using annuity formula: ${npv_annuity/1e9:,.0f}B.\")" ] }, { "cell_type": "code", "execution_count": null, "id": "865d2e98", "metadata": {}, "outputs": [], "source": [ "# --- Parameters ---\n", "growth_rate = .1 # Annual growth (e.g., 3%). Use negative for shrinkage.\n", "initial_cash_flow = cash_flow\n", "\n", "# --- General NPV Formula with growth ---\n", "# NPV = Σ [C0 * (1 + g)^(t - 1) / (1 + r)^t] for t in 1..n\n", "\n", "npv_growth = sum(\n", " initial_cash_flow * (1 + growth_rate) ** (t - 1) / (1 + discount_rate) ** t\n", " for t in range(1, years + 1)\n", ")\n", "\n", "print(f\"NPV with {growth_rate*100:.1f}% annual growth over {years} years: ${npv_growth/1e9:,.0f}B\")" ] }, { "cell_type": "code", "execution_count": null, "id": "27c5801a", "metadata": {}, "outputs": [], "source": [ "# --- Growth scenarios to visualize ---\n", "growth_rates = [-0.25, -0.05, 0.00, 0.10]\n", "\n", "# --- NPV Calculation over Time for Each Growth Rate ---\n", "npvs = {}\n", "\n", "for g in growth_rates:\n", " npv = []\n", " for t in range(1, years + 1):\n", " cash_flow_t = initial_cash_flow * (1 + g) ** (t - 1)\n", " discounted_cf = cash_flow_t / (1 + discount_rate) ** t\n", " npv.append(discounted_cf)\n", " npvs[g] = npv\n", "\n", "# --- Plot Cumulative NPV ---\n", "plt.figure(figsize=(10, 6))\n", "\n", "# Colour palette: black for baseline, greys for the rest\n", "colour_map = {\n", " -0.25: '0.85', # light grey\n", " -0.05: '0.65', # mid-light grey\n", " 0.00: 'black', # baseline\n", " 0.10: '0.45', # dark grey\n", "}\n", "\n", "for g, values in npvs.items():\n", " cumulative_npv = np.cumsum(values)\n", " label = f\"{g*100:+.0f}% growth\"\n", " plt.plot(\n", " range(1, years + 1),\n", " cumulative_npv / 1e12, # convert to trillions\n", " label=label,\n", " color=colour_map[g],\n", " linewidth=2\n", " )\n", "\n", "plt.title(f\"Cumulative NPV of Google Search (${cash_flow/1e9:,.0f} B Starting Cash Flow)\")\n", "plt.xlabel(\"Year\")\n", "plt.ylabel(\"Cumulative NPV (Trillions USD)\")\n", "plt.legend(title=\"Annual Growth Rate\")\n", "plt.grid(True)\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 5 }