Skip to content

Instantly share code, notes, and snippets.

@friso
Last active March 28, 2017 18:59
Show Gist options
  • Save friso/0cf541bf96357036eba119e656cf1895 to your computer and use it in GitHub Desktop.
Save friso/0cf541bf96357036eba119e656cf1895 to your computer and use it in GitHub Desktop.
Slides for a meetup talk on the caveats of bringing ML systems to production.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib\n",
"import graphviz as gv\n",
"\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import mean_squared_error, mean_absolute_error\n",
"from IPython.display import IFrame"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"%load_ext rpy2.ipython"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array(['ggrepel', 'ggthemes', 'ggplot2', 'tools', 'stats', 'graphics',\n",
" 'grDevices', 'utils', 'datasets', 'methods', 'base'], \n",
" dtype='<U9')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%R library(ggplot2)\n",
"%R library(ggthemes)\n",
"%R library(ggrepel)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"matplotlib.rcParams['figure.figsize'] = (20.0, 10.0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Machine Learning in Production\n",
"\n",
"### Building an architecture for successful ML"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Who\n",
"## *Friso van Vollenhoven*\n",
"\n",
"- Former CTO of a *Big Data and Data Science* company\n",
"- Currently CTO of FashionTrade.com\n",
"- Have 19 [LinkedIn](https://www.linkedin.com/in/frisovanvollenhoven/) endorsements for *Awesomeness*\n",
"- Proud owner of a three character Twitter handle: [@fzk](https://twitter.com/fzk)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# FashionTrade.com ???\n",
"- Online market place for fashion wholesale\n",
"- B2B commerce platform\n",
"- Working toward a match making engine for fashion\n",
"- Hiring `computer people`: https://careers.fashiontrade.com"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## *The essential trick in machine learning is to make a program **describe a large number of samples** using a **small amount of data**, forcing the model to internalise the essence of the data.*"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" <th>c</th>\n",
" <th>y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>50000.000000</td>\n",
" <td>50000.000000</td>\n",
" <td>50000.000000</td>\n",
" <td>50000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>-30.004452</td>\n",
" <td>40.023619</td>\n",
" <td>2.608842</td>\n",
" <td>-177.364818</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>6.002645</td>\n",
" <td>3.008757</td>\n",
" <td>1.136443</td>\n",
" <td>60.709514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-52.632651</td>\n",
" <td>27.589375</td>\n",
" <td>0.144847</td>\n",
" <td>-400.342537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-34.059030</td>\n",
" <td>38.000778</td>\n",
" <td>1.775344</td>\n",
" <td>-218.305607</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>-29.986631</td>\n",
" <td>40.015265</td>\n",
" <td>2.451936</td>\n",
" <td>-176.976663</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>-25.923589</td>\n",
" <td>42.029533</td>\n",
" <td>3.278313</td>\n",
" <td>-136.125851</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>-6.456606</td>\n",
" <td>51.811753</td>\n",
" <td>10.086046</td>\n",
" <td>52.274042</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c y\n",
"count 50000.000000 50000.000000 50000.000000 50000.000000\n",
"mean -30.004452 40.023619 2.608842 -177.364818\n",
"std 6.002645 3.008757 1.136443 60.709514\n",
"min -52.632651 27.589375 0.144847 -400.342537\n",
"25% -34.059030 38.000778 1.775344 -218.305607\n",
"50% -29.986631 40.015265 2.451936 -176.976663\n",
"75% -25.923589 42.029533 3.278313 -136.125851\n",
"max -6.456606 51.811753 10.086046 52.274042"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.random.normal(loc=-30, scale=6., size=50000)\n",
"b = np.random.normal(loc=40, scale=3., size=50000)\n",
"c = np.random.beta(5, 100, size=50000) * 55\n",
"y = 10 * a + 3 * b + c\n",
"df = pd.DataFrame({\n",
" 'a': a,\n",
" 'b': b,\n",
" 'c': c,\n",
" 'y': y\n",
" })\n",
"\n",
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x109dfa5c0>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nydRZOnXA87RMzqyZfr0N7e1fm3Od7373O5M83n6dmUOmZcvmDnc+8IH3T/tzeE1K+bZ5v9cLFy7M\n1q23p9VqZcuWLWm1Wtm69fYsXLhwtj8SAAAAAGhMmezHz1xKKUuS7Nq1a1eWLFlyrJcDHEWHakXW\narWyePHiTG3FlfbzdWm1WoeszNi7d29e/OIfyd13T4YTV1+9IkmybdsnDmwbGJicn3LHHXe023g9\nmDp0WZu6EiWZbE3WcWnq2THLkzwlyV8l+Z7UoUzVvsb5nZ8oSffPs3fatadef6517ty5s73Gq9uv\nf0u658ssWdKXXbvuzcqV12ZkZGcmJib39/RsTH//smza9J7s2bMnp512Wr785S/nla985ZN6rwEA\nAADgaNi9e3eWLl2aJEurqto93/PMmAGYpre3d84P+2eeEZN0WnGNjY3Nef74+HjWrFk3JZS56qrl\n+aM/+sMsXLhw1mDo4Dk4tyf5UJJXJPlkkmennkuzKMlTU1ebXJ96fsulqcOYX009R6Z7ls70n2dh\n+9o72j/TbUkeSXJT/viP/zgveclLkswcYE2u8aXtNUydL/OBD7wvSV2dtHr12gwPT+5fvnxF9u3b\n1w69akuWXD5tbQeOTnLo9xoAAAAAjjdamQEcpplnxCSdVlydeTCzmakN2qc+9dkDrblmm1Ezcwu0\nve29D2WyZVhvJmfC3NN+vC91+7KXpr71d7cq+9wsP8+D7cfl7fOS3/iNtx3YO/ssnQVJ3pBkdXsd\nr0vyHUmSs846K8nM7cZOP/30bN++a8r7MnWeTrf5vdcAAAAAcLxRMQNwmDoBycjIhkxMVJnaimtw\nzgqOzpyY5J1JnpHk35Ncn4mJKsPD6zI6Ojrn+TNVmjzjGc/M+Pj61C3KOm3Dbmhv/3DX2S9IHcLs\nT3JZplazfGeS10y7xvr2972pw5Jk9+6/nnONdTXRTNe/Osm2gypcOtVJk+9Ld8uy67N/f5Xkp9LT\nc/jvNQAAAAAcj1TMADwBQ0Obpw2oX5f+/mUZGto853n33Xdf6lvvTUkGk/QluTbJJe3rDmV0dHTW\n82eqNLn00kuSfHPKWpJv5tJLL0mr1cpFFz2nffaOJJ1qn5elni2zpf3460kem3aNx5L8X6nDko2p\nw5W6fdhsJquJpl//p5PMXuEyd3u4/bnkkgtzuO81AAAAAByPBDMAT8BMAcnWrbdn4cKFc553663v\n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\nAAAAAAAkOU6CmVLK25K8fo5DqiTfX1VVq6qq3+ra/rlSyr4kv1NK+aWqqvbN9hLtr2quZRxi/1OT\n5Itf/OIchwAnu0cffTS7d+8+1ssAjiH3ASBxLwDcBwD3AWBKXvDUwzmvVNVcWUQzSinnJDnnEIfd\nP609Wefci5J8Nsn3VVU1Wkr5f5OcWVXVS7qOeWGSu5I8o6qqR0spf5/kXVVVbeo65i1Jfriqqstm\nWeOaJL9/eD8ZAAAAAABwkru+qqqPzffg46Jipqqqh5M8/ARPvyzJ/iRfaz//dJK3llJ6qqqaaG97\nUZK/q6rq0a5jrkmyqes6K9rbZzOc5PokX07y709wrQAAAAAAwMnhqUm+J3V+MG/HRcXMfJVSliV5\nbpJPJnks9YyZdye5vaqql7WP+Y4kX0ryiSRvT/KcJB9OsrGqqg+3j3leku1J3pDk9iSr298vqarq\nC03+TAAAAAAAwKnjRAtmLkvyviSLk5yR5IEkH03ynu75MqWU5yR5b5Irknw9yaaqqm6edq0fTfIb\nSb47yWiSm6qqOqxUCwAAAAAA4HCcUMEMAAAAAADAiWzBsV4AAAAAAADAqUIwAwAAAAAA0BDBzDyU\nUq4tpewspfxbKWW8lPL/Tdt/finl9lLKv5ZSvlJKeUcpxXsLJ5FSypdLKfu7viZKKb847ZiLSyk7\nSinfLKX8fSnlpmO1XuDoKaU8pZRyX/tecPG0fe4DcBIrpfxZ++/2N0sp/1RK+Wgp5dnTjnEfgJNY\nKeW7SykfKqXc3/6MYLSU8pZSyunTjnMvgJNYKeWNpZS/bH8WOD7LMT4vhJNcKeU1pZQH2v+931lK\nuWK+57oZHEIp5UeTfDTJh5M8J8nzk3ysa/+CJFuSnJZkWZKfSvIfk/xa02sFjqoqya8kOS/Js5I8\nO8mtnZ2llDOTDCd5IMmSJDcleUsp5eXNLxU4yt6R5B9S3xcOcB+AU8K2JNcl6UvykiQXJvlvnZ3u\nA3BK+L4kJckrklyU5LVJfi7Jb3QOcC+AU8LpSf5rkvfPtNPnhXDyK6W8NMm7krw5yWVJPpNkuJRy\n7rzOr6rq0EedokopPUm+nORNVVX9l1mOWZXkz5M8u6qqr7e3/WyS30zynVVVPd7MaoGjqZTyQJL3\nVFW1aZb9r0ry60me1fl7X0p5W5IfrqrqouZWChxN7f/u35zkR5N8IcmlVVX9bXuf+wCcYkop/3eS\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x102a1d6a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(kind='scatter', x='a', y='y')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"df[['a', 'b', 'y']].to_csv('data.csv', index=False)\n",
"df[['a', 'b', 'c', 'y']].to_csv('more-data.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Machine learning 101"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Data"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" <th>y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>50000.000000</td>\n",
" <td>50000.000000</td>\n",
" <td>50000.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>-30.004452</td>\n",
" <td>40.023619</td>\n",
" <td>-177.364818</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>6.002645</td>\n",
" <td>3.008757</td>\n",
" <td>60.709514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-52.632651</td>\n",
" <td>27.589375</td>\n",
" <td>-400.342537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-34.059030</td>\n",
" <td>38.000778</td>\n",
" <td>-218.305607</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>-29.986631</td>\n",
" <td>40.015265</td>\n",
" <td>-176.976663</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>-25.923589</td>\n",
" <td>42.029533</td>\n",
" <td>-136.125851</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>-6.456606</td>\n",
" <td>51.811753</td>\n",
" <td>52.274042</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b y\n",
"count 50000.000000 50000.000000 50000.000000\n",
"mean -30.004452 40.023619 -177.364818\n",
"std 6.002645 3.008757 60.709514\n",
"min -52.632651 27.589375 -400.342537\n",
"25% -34.059030 38.000778 -218.305607\n",
"50% -29.986631 40.015265 -176.976663\n",
"75% -25.923589 42.029533 -136.125851\n",
"max -6.456606 51.811753 52.274042"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples = pd.read_csv('data.csv')\n",
"samples.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Train"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X, y = samples[['a', 'b']], samples[['y']]\n",
"train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=.15, random_state=42)\n",
"\n",
"model = LinearRegression(fit_intercept=True)\n",
"model.fit(train_X, train_y)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Test"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.89686617689281922, 1.2874773383756033)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
"mean_absolute_error(\n",
" test_y,\n",
" model.predict(test_X)),\n",
"mean_squared_error(\n",
" test_y,\n",
" model.predict(test_X))\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Predict"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-290.74568218]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.predict([-39.03, 32.32])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"def normalize_name(name):\n",
" return name.lower().replace(' ', '-')\n",
"\n",
"def node(name):\n",
" def apply(graph):\n",
" graph.node(normalize_name(name), label=name)\n",
" return apply\n",
"\n",
"def actor(name):\n",
" def apply(graph):\n",
" graph.node(normalize_name(name), label=name, shape='circle')\n",
" return apply\n",
"\n",
"def artefact(name):\n",
" def apply(graph):\n",
" graph.node(normalize_name(name), label=name, shape='tab')\n",
" return apply\n",
"\n",
"def state(name):\n",
" def apply(graph):\n",
" graph.node(normalize_name(name), label=name, shape='box3d')\n",
" return apply\n",
"\n",
"def process(name):\n",
" def apply(graph):\n",
" graph.node(normalize_name(name), label=name, style='filled')\n",
" return apply\n",
"\n",
"def sync_edge(source, target):\n",
" def apply(graph):\n",
" graph.edge(normalize_name(source), normalize_name(target), arrowType='normal', color='black')\n",
" return apply\n",
"\n",
"def async_edge(source, target):\n",
" def apply(graph):\n",
" graph.edge(normalize_name(source), normalize_name(target), arrowType='normal', color='red', style='dashed')\n",
" return apply\n",
" \n",
"def dependency(source, target):\n",
" def apply(graph):\n",
" graph.edge(normalize_name(source), normalize_name(target), arrowType='normal', style='dashed')\n",
" return apply\n",
" \n",
"def cluster(name, *contents):\n",
" def apply(graph):\n",
" sg = gv.Digraph(name='cluster %s' % normalize_name(name), graph_attr={\n",
" 'label': name, 'color':'blue', 'style':'box'\n",
" })\n",
" for item in contents:\n",
" item(sg)\n",
" graph.subgraph(sg)\n",
" return apply\n",
" \n",
"def graph(title, *contents):\n",
" result = gv.Digraph(graph_attr={'label':title})\n",
" for item in contents:\n",
" item(result)\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" state('model state'), actor('user'),\n",
" cluster('offline training', process('training'), artefact('data'), sync_edge('data', 'training')),\n",
" cluster('online predictions', process('evaluate model'), artefact('prediction'), artefact('unknown sample'),\n",
" sync_edge('unknown sample', 'evaluate model')),\n",
" sync_edge('training', 'model state'), dependency('evaluate model', 'model state'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"280pt\" height=\"334pt\"\n",
" viewBox=\"0.00 0.00 280.34 333.68\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 329.6803)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-329.6803 276.3409,-329.6803 276.3409,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"136.1705\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-171.6803 8,-317.6803 107,-317.6803 107,-171.6803 8,-171.6803\"/>\n",
"<text text-anchor=\"middle\" x=\"57.5\" y=\"-302.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"115,-99.6803 115,-317.6803 259,-317.6803 259,-99.6803 115,-99.6803\"/>\n",
"<text text-anchor=\"middle\" x=\"187\" y=\"-302.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions</text>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"104.1486,-143.6803 27.8514,-143.6803 23.8514,-139.6803 23.8514,-107.6803 100.1486,-107.6803 104.1486,-111.6803 104.1486,-143.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"100.1486,-139.6803 23.8514,-139.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"100.1486,-139.6803 100.1486,-107.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"100.1486,-139.6803 104.1486,-143.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"64\" y=\"-121.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"247\" cy=\"-46.8402\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"247\" y=\"-42.6402\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"246.7659,-287.6803 147.2341,-287.6803 147.2341,-291.6803 135.2341,-291.6803 135.2341,-251.6803 246.7659,-251.6803 246.7659,-287.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"135.2341,-287.6803 147.2341,-287.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"191\" y=\"-265.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M255.8855,-70.0684C267.3352,-103.9621 283.1785,-168.1078 260,-215.6803 254.2696,-227.4417 244.6013,-237.3954 234.2879,-245.4285\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"231.9987,-242.7645 225.9415,-251.457 236.0974,-248.4391 231.9987,-242.7645\"/>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"61\" cy=\"-197.6803\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"61\" y=\"-193.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M61.757,-179.5117C62.0779,-171.8113 62.4594,-162.6547 62.816,-154.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"66.3133,-154.2307 63.2328,-144.0936 59.3194,-153.9392 66.3133,-154.2307\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"88,-287.6803 46,-287.6803 46,-291.6803 34,-291.6803 34,-251.6803 88,-251.6803 88,-287.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"34,-287.6803 46,-287.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"61\" y=\"-265.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M61,-251.5117C61,-243.8113 61,-234.6547 61,-226.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"64.5001,-226.0936 61,-216.0936 57.5001,-226.0936 64.5001,-226.0936\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"187\" cy=\"-197.6803\" rx=\"63.7604\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"187\" y=\"-193.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M159.0894,-181.3424C142.7927,-171.8029 121.9568,-159.6063 103.945,-149.0628\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"105.2206,-145.754 94.8223,-143.7227 101.6843,-151.7951 105.2206,-145.754\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"237.2592,-143.6803 176.7408,-143.6803 176.7408,-147.6803 164.7408,-147.6803 164.7408,-107.6803 237.2592,-107.6803 237.2592,-143.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"164.7408,-143.6803 176.7408,-143.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"201\" y=\"-121.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M190.5328,-179.5117C192.0301,-171.8113 193.8105,-162.6547 195.4745,-154.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"198.9465,-154.5778 197.4196,-144.0936 192.0752,-153.2417 198.9465,-154.5778\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M211.6689,-107.3947C216.924,-98.3879 223.3984,-87.2913 229.3632,-77.0682\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"232.4138,-78.7848 234.4303,-68.3836 226.3677,-75.2571 232.4138,-78.7848\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M189.9906,-251.5117C189.5628,-243.8113 189.0541,-234.6547 188.5787,-226.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"192.0724,-225.884 188.023,-216.0936 185.0831,-226.2724 192.0724,-225.884\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x109e0add8>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" state('cached predictions'), actor('user'),\n",
" cluster('offline training', state('model state'), process('training'), artefact('data'), process('offline predictions'),\n",
" sync_edge('data', 'training'), dependency('offline predictions', 'model state')),\n",
" cluster('online predictions', process('business rules'), artefact('prediction'), artefact('unknown sample'),\n",
" sync_edge('unknown sample', 'business rules')),\n",
" sync_edge('training', 'model state'), dependency('business rules', 'cached predictions'),\n",
" sync_edge('business rules', 'prediction'), sync_edge('offline predictions', 'cached predictions'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"558pt\" height=\"334pt\"\n",
" viewBox=\"0.00 0.00 558.01 333.68\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 329.6803)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-329.6803 554.0075,-329.6803 554.0075,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"275.0038\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-99.6803 8,-317.6803 267,-317.6803 267,-99.6803 8,-99.6803\"/>\n",
"<text text-anchor=\"middle\" x=\"137.5\" y=\"-302.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"403,-99.6803 403,-317.6803 537,-317.6803 537,-99.6803 403,-99.6803\"/>\n",
"<text text-anchor=\"middle\" x=\"470\" y=\"-302.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions</text>\n",
"</g>\n",
"<!-- cached&#45;predictions -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>cached&#45;predictions</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"395.0633,-143.6803 278.9367,-143.6803 274.9367,-139.6803 274.9367,-107.6803 391.0633,-107.6803 395.0633,-111.6803 395.0633,-143.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"391.0633,-139.6803 274.9367,-139.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"391.0633,-139.6803 391.0633,-107.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"391.0633,-139.6803 395.0633,-143.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"335\" y=\"-121.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">cached predictions</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"524\" cy=\"-46.8402\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"524\" y=\"-42.6402\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"526.7659,-287.6803 427.2341,-287.6803 427.2341,-291.6803 415.2341,-291.6803 415.2341,-251.6803 526.7659,-251.6803 526.7659,-287.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"415.2341,-287.6803 427.2341,-287.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"471\" y=\"-265.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M533.0101,-70.0189C544.6446,-103.8509 560.8479,-167.9205 538,-215.6803 532.404,-227.3778 522.9007,-237.3508 512.7828,-245.424\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"510.5504,-242.7221 504.5997,-251.4879 514.718,-248.3462 510.5504,-242.7221\"/>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"160.1486,-143.6803 83.8514,-143.6803 79.8514,-139.6803 79.8514,-107.6803 156.1486,-107.6803 160.1486,-111.6803 160.1486,-143.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"156.1486,-139.6803 79.8514,-139.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"156.1486,-139.6803 156.1486,-107.6803 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"156.1486,-139.6803 160.1486,-143.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"120\" y=\"-121.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"54\" cy=\"-197.6803\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"54\" y=\"-193.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M69.3076,-180.9811C77.3604,-172.1963 87.4088,-161.2344 96.4306,-151.3925\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"99.2108,-153.5391 103.388,-143.8025 94.0507,-148.809 99.2108,-153.5391\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"81,-287.6803 39,-287.6803 39,-291.6803 27,-291.6803 27,-251.6803 81,-251.6803 81,-287.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"27,-287.6803 39,-287.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"54\" y=\"-265.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M54,-251.5117C54,-243.8113 54,-234.6547 54,-226.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"57.5001,-226.0936 54,-216.0936 50.5001,-226.0936 57.5001,-226.0936\"/>\n",
"</g>\n",
"<!-- offline&#45;predictions -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>offline&#45;predictions</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"184\" cy=\"-197.6803\" rx=\"74.9031\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"184\" y=\"-193.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline predictions</text>\n",
"</g>\n",
"<!-- offline&#45;predictions&#45;&gt;cached&#45;predictions -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>offline&#45;predictions&#45;&gt;cached&#45;predictions</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.8873,-181.5221C238.5981,-171.6468 265.3842,-158.8746 288.111,-148.038\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"289.7271,-151.145 297.2471,-143.6817 286.7143,-144.8265 289.7271,-151.145\"/>\n",
"</g>\n",
"<!-- offline&#45;predictions&#45;&gt;model&#45;state -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>offline&#45;predictions&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M168.1798,-179.8826C160.5452,-171.2937 151.2432,-160.829 142.8561,-151.3935\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"145.3424,-148.9223 136.0828,-143.7735 140.1105,-153.5729 145.3424,-148.9223\"/>\n",
"</g>\n",
"<!-- business&#45;rules -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>business&#45;rules</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"470\" cy=\"-197.6803\" rx=\"59.4599\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"470\" y=\"-193.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">business rules</text>\n",
"</g>\n",
"<!-- business&#45;rules&#45;&gt;cached&#45;predictions -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>business&#45;rules&#45;&gt;cached&#45;predictions</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M440.3737,-181.8796C422.066,-172.1155 398.2624,-159.4203 377.9124,-148.5669\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"379.3082,-145.3447 368.8375,-143.727 376.014,-151.5212 379.3082,-145.3447\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"517.2592,-143.6803 456.7408,-143.6803 456.7408,-147.6803 444.7408,-147.6803 444.7408,-107.6803 517.2592,-107.6803 517.2592,-143.6803\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"444.7408,-143.6803 456.7408,-143.6803 \"/>\n",
"<text text-anchor=\"middle\" x=\"481\" y=\"-121.4803\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- business&#45;rules&#45;&gt;prediction -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>business&#45;rules&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M472.7758,-179.5117C473.9522,-171.8113 475.3511,-162.6547 476.6586,-154.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"480.1364,-154.5075 478.1869,-144.0936 473.2167,-153.4503 480.1364,-154.5075\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M490.9731,-107.3947C495.7979,-98.5485 501.7221,-87.6864 507.2146,-77.616\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"510.3779,-79.1257 512.0935,-68.6707 504.2325,-75.774 510.3779,-79.1257\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;business&#45;rules -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;business&#45;rules</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M470.7477,-251.5117C470.6407,-243.8113 470.5135,-234.6547 470.3947,-226.097\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"473.8944,-226.044 470.2557,-216.0936 466.8951,-226.1413 473.8944,-226.044\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10bd61668>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Model state"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 10.00098282, 3.00127609]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.coef_"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Did someone say *state*?\n",
"- Handle model state updates\n",
" - Deal with staleness\n",
" - Partial state updates\n",
" - Atomicity\n",
"- Distribution of state (read scalability)\n",
"- Versioning"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# What about feedback?"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" state('model state'), actor('user'),\n",
" cluster('offline training', process('training'), artefact('data'), sync_edge('data', 'training')),\n",
" cluster('online predictions service', artefact('feedback'), process('evaluate model'), artefact('prediction'),\n",
" artefact('unknown sample'), sync_edge('unknown sample', 'evaluate model')),\n",
" sync_edge('training', 'model state'), dependency('evaluate model', 'model state'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user'),\n",
" sync_edge('user', 'feedback'), sync_edge('feedback', 'model state')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"360pt\" height=\"314pt\"\n",
" viewBox=\"0.00 0.00 359.60 313.68\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 309.6803)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-309.6803 355.6002,-309.6803 355.6002,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"175.8001\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-102 8,-248 107,-248 107,-102 8,-102\"/>\n",
"<text text-anchor=\"middle\" x=\"57.5\" y=\"-232.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"115,-30 115,-248 327,-248 327,-30 115,-30\"/>\n",
"<text text-anchor=\"middle\" x=\"221\" y=\"-232.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"107.1486,-74 30.8514,-74 26.8514,-70 26.8514,-38 103.1486,-38 107.1486,-42 107.1486,-74\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"103.1486,-70 26.8514,-70 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"103.1486,-70 103.1486,-38 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"103.1486,-70 107.1486,-74 \"/>\n",
"<text text-anchor=\"middle\" x=\"67\" y=\"-51.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"263\" cy=\"-280.8402\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"263\" y=\"-276.6402\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"189.0193,-218 134.9807,-218 134.9807,-222 122.9807,-222 122.9807,-182 189.0193,-182 189.0193,-218\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"122.9807,-218 134.9807,-218 \"/>\n",
"<text text-anchor=\"middle\" x=\"156\" y=\"-195.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- user&#45;&gt;feedback -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>user&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M239.7828,-271.726C226.782,-266.0026 210.6858,-257.8434 198,-248 190.0335,-241.8185 182.4203,-233.9612 175.917,-226.4024\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"178.3922,-223.9025 169.3317,-218.4109 172.99,-228.3541 178.3922,-223.9025\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"318.7659,-218 219.2341,-218 219.2341,-222 207.2341,-222 207.2341,-182 318.7659,-182 318.7659,-218\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"207.2341,-218 219.2341,-218 \"/>\n",
"<text text-anchor=\"middle\" x=\"263\" y=\"-195.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M263,-255.705C263,-247.0717 263,-237.3474 263,-228.4686\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.5001,-228.1877 263,-218.1878 259.5001,-228.1878 266.5001,-228.1877\"/>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"61\" cy=\"-128\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"61\" y=\"-123.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M62.5141,-109.8314C63.1558,-102.131 63.9188,-92.9743 64.6319,-84.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"68.1229,-84.6694 65.4656,-74.4133 61.1471,-84.088 68.1229,-84.6694\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"88,-218 46,-218 46,-222 34,-222 34,-182 88,-182 88,-218\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"34,-218 46,-218 \"/>\n",
"<text text-anchor=\"middle\" x=\"61\" y=\"-195.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M61,-181.8314C61,-174.131 61,-164.9743 61,-156.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"64.5001,-156.4132 61,-146.4133 57.5001,-156.4133 64.5001,-156.4132\"/>\n",
"</g>\n",
"<!-- feedback&#45;&gt;model&#45;state -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>feedback&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M149.7016,-181.7106C142.2023,-161.2805 128.4665,-127.7056 111,-102 106.0894,-94.7731 100.0152,-87.6225 93.9645,-81.1905\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"96.4367,-78.7125 86.9435,-74.0084 91.4312,-83.6058 96.4367,-78.7125\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"255\" cy=\"-128\" rx=\"63.7604\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"255\" y=\"-123.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M215.7654,-113.6429C189.1249,-103.8151 152.8581,-90.2835 116.8918,-76.288\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"117.8522,-72.9057 107.2641,-72.5272 115.3052,-79.4259 117.8522,-72.9057\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"305.2592,-74 244.7408,-74 244.7408,-78 232.7408,-78 232.7408,-38 305.2592,-38 305.2592,-74\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"232.7408,-74 244.7408,-74 \"/>\n",
"<text text-anchor=\"middle\" x=\"269\" y=\"-51.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M258.5328,-109.8314C260.0301,-102.131 261.8105,-92.9743 263.4745,-84.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.9465,-84.8975 265.4196,-74.4133 260.0752,-83.5614 266.9465,-84.8975\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M302.6091,-74.0908C312.6618,-81.3331 322.4714,-90.6791 328,-102 356.4749,-160.3074 361.9987,-192.7311 328,-248 321.0479,-259.3014 308.8723,-266.8558 296.9242,-271.8361\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"295.6742,-268.5666 287.4949,-275.3008 298.0885,-275.1371 295.6742,-268.5666\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M260.9813,-181.8314C260.1257,-174.131 259.1083,-164.9743 258.1574,-156.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"261.6289,-155.9656 257.0459,-146.4133 254.6717,-156.7386 261.6289,-155.9656\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10bd61780>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Feedback cycle: *better stale than sorry*\n",
"- Always asynchronous\n",
"- Operate and scale separately of the prediction service\n",
"- Add to ground truth before re-training / partially training"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" state('model state'), actor('user'),\n",
" cluster('offline training', process('training'), artefact('data'), sync_edge('data', 'training')),\n",
" cluster('online predictions service', artefact('feedback'), process('evaluate model'), artefact('prediction'),\n",
" artefact('unknown sample'), sync_edge('unknown sample', 'evaluate model')),\n",
" sync_edge('training', 'model state'), dependency('evaluate model', 'model state'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user'),\n",
" async_edge('user', 'feedback'), sync_edge('feedback', 'data')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"358pt\" height=\"372pt\"\n",
" viewBox=\"0.00 0.00 358.10 371.68\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 367.6803)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-367.6803 354.0996,-367.6803 354.0996,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"175.0498\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-86 8,-232 107,-232 107,-86 8,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"57.5\" y=\"-216.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"115,-86 115,-306 327,-306 327,-86 115,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"221\" y=\"-290.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"157.1486,-58 80.8514,-58 76.8514,-54 76.8514,-22 153.1486,-22 157.1486,-26 157.1486,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"153.1486,-54 76.8514,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"153.1486,-54 153.1486,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"153.1486,-54 157.1486,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"117\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"263\" cy=\"-338.8402\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"263\" y=\"-334.6402\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"189.0193,-276 134.9807,-276 134.9807,-280 122.9807,-280 122.9807,-240 189.0193,-240 189.0193,-276\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"122.9807,-276 134.9807,-276 \"/>\n",
"<text text-anchor=\"middle\" x=\"156\" y=\"-253.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- user&#45;&gt;feedback -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>user&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M239.7828,-329.726C226.782,-324.0026 210.6858,-315.8434 198,-306 190.0335,-299.8185 182.4203,-291.9612 175.917,-284.4024\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"178.3922,-281.9025 169.3317,-276.4109 172.99,-286.3541 178.3922,-281.9025\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"318.7659,-276 219.2341,-276 219.2341,-280 207.2341,-280 207.2341,-240 318.7659,-240 318.7659,-276\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"207.2341,-276 219.2341,-276 \"/>\n",
"<text text-anchor=\"middle\" x=\"263\" y=\"-253.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M263,-313.705C263,-305.0717 263,-295.3474 263,-286.4686\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.5001,-286.1877 263,-276.1878 259.5001,-286.1878 266.5001,-286.1877\"/>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"61\" cy=\"-112\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"61\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.2712,-94.937C80.9254,-86.3816 89.1311,-75.8314 96.567,-66.271\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"99.4684,-68.2415 102.8451,-58.1992 93.9429,-63.9439 99.4684,-68.2415\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"93,-202 51,-202 51,-206 39,-206 39,-166 93,-166 93,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"39,-202 51,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"66\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M64.7383,-165.8314C64.2035,-158.131 63.5677,-148.9743 62.9734,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"66.4632,-140.1467 62.2787,-130.4133 59.48,-140.6317 66.4632,-140.1467\"/>\n",
"</g>\n",
"<!-- feedback&#45;&gt;data -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>feedback&#45;&gt;data</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M122.8173,-240.3384C118.7142,-237.7208 114.6753,-234.9164 111,-232 102.6785,-225.3966 94.4643,-217.2563 87.3776,-209.5672\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"89.9786,-207.2251 80.7046,-202.1021 84.7597,-211.8902 89.9786,-207.2251\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"255\" cy=\"-184\" rx=\"63.7604\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"255\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M238.0785,-166.3428C213.8974,-141.1103 169.3149,-94.5894 141.5184,-65.5845\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"143.9413,-63.0542 134.4953,-58.256 138.8874,-67.8975 143.9413,-63.0542\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"305.2592,-130 244.7408,-130 244.7408,-134 232.7408,-134 232.7408,-94 305.2592,-94 305.2592,-130\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"232.7408,-130 244.7408,-130 \"/>\n",
"<text text-anchor=\"middle\" x=\"269\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M258.5328,-165.8314C260.0301,-158.131 261.8105,-148.9743 263.4745,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.9465,-140.8975 265.4196,-130.4133 260.0752,-139.5614 266.9465,-140.8975\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M297.432,-130.0399C309.2228,-139.2199 321.6204,-151.5128 328,-166 353.0765,-222.9454 360.6015,-253.0024 328,-306 321.0479,-317.3014 308.8723,-324.8558 296.9242,-329.8361\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"295.6742,-326.5666 287.4949,-333.3008 298.0885,-333.1371 295.6742,-326.5666\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M261.0225,-239.7079C260.1215,-231.3739 259.0348,-221.3216 258.0339,-212.0633\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"261.5094,-211.6476 256.9548,-202.0817 254.55,-212.4 261.5094,-211.6476\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10bd61be0>"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Clickstream collection\n",
"- Because the fact that a prediction was served, doesn't mean the user interacted with it\n",
"- *A lot harder than it appears*"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" state('model state'), actor('user'), process('clickstream collection'), artefact('feedback'),\n",
" cluster('offline training', process('training'), artefact('data'), sync_edge('data', 'training')),\n",
" cluster('online predictions service', process('evaluate model'), artefact('prediction'),\n",
" artefact('unknown sample'), sync_edge('unknown sample', 'evaluate model')),\n",
" sync_edge('training', 'model state'), dependency('evaluate model', 'model state'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user'),\n",
" async_edge('user', 'clickstream collection'), async_edge('clickstream collection', 'feedback'), sync_edge('feedback', 'data')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"384pt\" height=\"444pt\"\n",
" viewBox=\"0.00 0.00 383.94 443.68\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 439.6803)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-439.6803 379.9449,-439.6803 379.9449,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"187.9724\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"181,-86 181,-232 280,-232 280,-86 181,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"230.5\" y=\"-216.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-158 8,-378 167,-378 167,-158 8,-158\"/>\n",
"<text text-anchor=\"middle\" x=\"87.5\" y=\"-362.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"184.1486,-58 107.8514,-58 103.8514,-54 103.8514,-22 180.1486,-22 184.1486,-26 184.1486,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"180.1486,-54 103.8514,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"180.1486,-54 180.1486,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"180.1486,-54 184.1486,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"144\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"172\" cy=\"-410.8402\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"172\" y=\"-406.6402\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>clickstream&#45;collection</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"288\" cy=\"-330\" rx=\"87.8898\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"288\" y=\"-325.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">clickstream collection</text>\n",
"</g>\n",
"<!-- user&#45;&gt;clickstream&#45;collection -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>user&#45;&gt;clickstream&#45;collection</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M192.4714,-396.5737C209.6587,-384.5959 234.551,-367.2485 254.6168,-353.2647\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"256.6813,-356.0921 262.8844,-347.503 252.679,-350.3491 256.6813,-356.0921\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"139.7659,-348 40.2341,-348 40.2341,-352 28.2341,-352 28.2341,-312 139.7659,-312 139.7659,-348\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"28.2341,-348 40.2341,-348 \"/>\n",
"<text text-anchor=\"middle\" x=\"84\" y=\"-325.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M153.3375,-393.6961C141.1911,-382.5379 125.1368,-367.7899 111.5354,-355.2951\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"113.5908,-352.4306 103.8586,-348.2429 108.8552,-357.5856 113.5908,-352.4306\"/>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"293.0193,-276 238.9807,-276 238.9807,-280 226.9807,-280 226.9807,-240 293.0193,-240 293.0193,-276\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"226.9807,-276 238.9807,-276 \"/>\n",
"<text text-anchor=\"middle\" x=\"260\" y=\"-253.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection&#45;&gt;feedback -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>clickstream&#45;collection&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M280.9344,-311.8314C277.874,-303.9617 274.2221,-294.5712 270.8318,-285.8533\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"274.0473,-284.4647 267.1607,-276.4133 267.5232,-287.0019 274.0473,-284.4647\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"264,-202 222,-202 222,-206 210,-206 210,-166 264,-166 264,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"210,-202 222,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"237\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- feedback&#45;&gt;data -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>feedback&#45;&gt;data</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M254.3146,-239.7079C251.6965,-231.2843 248.5327,-221.1052 245.6296,-211.7649\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"248.9304,-210.5923 242.62,-202.0817 242.2458,-212.67 248.9304,-210.5923\"/>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"230\" cy=\"-112\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"230\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M210.9138,-96.0209C199.9537,-86.8449 185.9543,-75.1245 173.5961,-64.7781\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"175.6749,-61.9538 165.7605,-58.2181 171.1813,-67.3211 175.6749,-61.9538\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M235.2336,-165.8314C234.485,-158.131 233.5947,-148.9743 232.7627,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"236.2415,-140.0276 231.7902,-130.4133 229.2744,-140.7051 236.2415,-140.0276\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"80\" cy=\"-258\" rx=\"63.7604\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"80\" y=\"-253.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M76.7364,-239.954C73.7288,-219.6595 70.7294,-185.8932 78,-158 86.8723,-123.962 107.9731,-89.3398 123.9457,-66.4809\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"126.8104,-68.4918 129.78,-58.3216 121.1164,-64.4202 126.8104,-68.4918\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"159.2592,-202 98.7408,-202 98.7408,-206 86.7408,-206 86.7408,-166 159.2592,-166 159.2592,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"86.7408,-202 98.7408,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"123\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M90.4091,-240.0867C95.4948,-231.3346 101.7205,-220.6205 107.3629,-210.9103\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"110.5397,-212.4096 112.5377,-202.0049 104.4873,-208.8926 110.5397,-212.4096\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M135.0094,-202.1384C141.4276,-212.737 148.8434,-226.6236 153,-240 167.1249,-285.4549 171.0244,-340.5868 171.9572,-375.6921\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"168.4622,-375.9823 172.1595,-385.9111 175.4608,-375.8437 168.4622,-375.9823\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M82.9906,-311.8314C82.5628,-304.131 82.0541,-294.9743 81.5787,-286.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.0724,-286.2037 81.023,-276.4133 78.0831,-286.592 85.0724,-286.2037\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10bd61f60>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### &lt;shameless plug&gt;"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"scrolled": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"900\"\n",
" height=\"540\"\n",
" src=\"http://www.divolte.io/\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x10bd66518>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"IFrame('http://www.divolte.io/', 900, 540)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"### &lt;/shameless plug&gt;"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Some users\n",
"- [Uitzending Gemist](http://www.npo.nl/uitzending-gemist)\n",
"- [Wehkamp](https://www.wehkamp.com/nlbe/)\n",
"- [wi-fi.ru](http://wi-fi.ru/desktop/)\n",
"- [MapR](https://www.mapr.com/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# How worng are we?"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x10bd61748>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYdSo3EkkSZIktWcWMpIkqaxUV7t+jKSW1b8/XHMN3H473Hdf7jSSJEmS2isLGUmSVDZSspCR1DpG\njIDDD4fTT4eFC3OnkSRJktQeWchIkqSy8frrsHSphYyklhcBN98MFRXw3e8WBbAkSZIktSQLGUmS\nVDbmzCkuBw/Om0NS+9SvH9x6K0yeDD//ee40kiRJktobCxlJklQ2qqqgTx/YaqvcSSS1V4ceCqNH\nw0UXwZQpudNIkiRJak8sZCRJUtmoqoIhQ4qphSSptYwZAwcfDMOHw0sv5U4jSZIkqb2wkJEkSWWj\nrpCRpNZUUQF33llMYXbIIbBoUe5EkiRJktoDCxlJklQW3nkHFiywkJHUNnr3hocegqVLi2nMPvgg\ndyJJkiRJ5c5CRpIklYXZs4vLnXbKm0NSx/GFLxSlzNy5cPTR8M9/5k4kSZIkqZxZyEiSpLJQVQVd\nu8J22+VOIqkjGToU7r8fHn0Ujj8eVq3KnUiSJElSubKQkSRJZWH2bBg8GDp3zp1EUkez//5wzz3w\nwAMwYgTU1OROJEmSJKkcWchIkqSyUFXl+jGS8vnWt+COO+Cuu+DMMyGl3IkkSZIklRt/YypJkkre\n8uXFGg7f/37uJJI6smOPhRUr4Dvfge7dYdw4iMidSpIkSVK5sJCRJEklr7oaVq/2DBlJ+Z1yCixb\nBuecAz16wM9+ljuRJEmSpHJhISNJkkpeVRVUVMCOO+ZOIklw9tnFmXujRhVnylx8ce5EkiRJksqB\nhYwkSSp5VVWw/fbFF5+SVArOP784U2b06OJMmfPOy51IkiRJUqmzkJEkSSXvqadg551zp5CktV1y\nSVHKjBxZFMann547kSRJkqRSZiEjSZJK2vLlMGcOnHpq7iSStLYIuPJK+PBDOPNM6NYNTjopdypJ\nkiRJpcpCRpIklbSqKli1CnbdNXcSSfqkCLj22qKU+c53ilLm6KNzp5IkSZJUiixkJElSSZs+Hbp2\nhcGDcyeRpIZVVMDNNxdn9J1wAmy+OeyxR+5UkiRJkkpNRe4AkiRJn2b6dBg6FCorcyeRpHXr1AnG\njy/O5jviCHj11dyJJEmSJJUaCxlJklTSpk93ujJJ5aFLF5g0qZi27LDDYNmy3IkkSZIklRILGUmS\nVLLeegsWLLCQkVQ++vWDBx+EefPglFOgpiZ3IkmSJEmlwkJGkiSVrOnTi0sLGUnlZPBguOOO4myZ\n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\nI7zzDjz8MJx6Krz8Mpx+OmyzDWy+ORx2GFx+OUyeDPPnF+ukSZIkSc1VKmvIjARuSilNAIiIM4FD\ngVOBsQ2MPxd4KKV0Te3tSyPiXykKmLPrjbk8pfS72n2eDLwJHA5MbK03IklSe7N6NTz1FDz0EPz2\nt8WZMQMHwnXXwfe+50LJkqTy1K1bMcXZAQcUt995B6ZNgxkz4OmnYdy44j4o/q774hfh85+HzTYr\ntgEDiunPNtqo2Hr0KM7KqS8lWLECPvyw4W35cpg7F847b83t+pcrVhT7iYCKijVbjx7Qs2cxFVvd\nZf/+Raa6ywEDoHv3tvvzlCRJ0vplL2QiohIYBlxRd19KKUXEI8Du63ja7hRn1NQ3FTisdp+fBwYA\nf6y3z/ciYnrtcy1kJElqwNKlMG8evPRSMQXZjBlFGfPuu9CnDxx6KNx4I+y7b/GFkCRJ7UWfPnD4\n4cUGRZmyYAG8+GLxY4QXXijOlpkxA/7xD3jrLaip2bDXqqwsCqHu3eG994p12Opud+tWbH36QNeu\nRRmTUvFaKcGqVbBsWbFGzoIFxfOXLoVFi4rH6uvZsyhmNt98TZHU0Na7d/E6ba2mBlauLHKnVGSo\nv1VUNHxbkiSpXGUvZIC+QCeKs1fqexPYbh3PGbCO8QNqr/cH0nrGfFxXgLlz564/sdQCli2D555r\n3NjWWmi0KfsthbFN0RoZyvF9vfzyUq65ZlaL77c1lML/Y63x3koha0rw0UfFr2zrb8uXF1/ivP12\n8QvgJUuKL3TqbLwx7LADHHcc7LJLcb1z7ZHD7NmNf32pJS1dupRZs9b/uSZJLaVfv2Lba6+171+9\n+pNntTT09/NnPlMUK127rrneud6/xEeOXMq4cc3/XKupKf4eX7JkzbZ48Zpt3jx44oni+rJlaz+3\nsrIob3r0WLN1717k7NSpKELqLisq1i5S6i7rX69/X0O367YNKbQqKqBLlzVbZeXal+u6XlnZ8PWP\n3+7c+dPLoIZuV1QU/+0b2ureY/1Sre6/17rGrl5dbDU1a/6c6u5b3/31b6/r/vrPr6go3nPd1qlT\nw5fNHdOUIq21SrfG7tfSr/leeWUpN9/s8Zpaz3bbFX9vSW2hXl/QtSX2F6m1vllrbICIzYC/A7un\nlKbXu38ssFdKaY8GnvMRcHJK6bf17jsbGJ1S2rx2jZnHgM1TSm/WGzMRWJVSOr6BfR4P3NmCb02S\n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\nAJAKND16VYefAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10bd665c0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"(test_y - model.predict(test_X)).plot(kind='density')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Residuals / evaluation are important\n",
"- Not only at modelling time\n",
"- Residuals of individual models change before business KPIs\n",
"- Monitoring and alerting\n",
"- Feedback latency is a constraint\n",
" - Use a proxy when available in case of high feedback latency"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" actor('user'), process('clickstream collection'), artefact('feedback'), state('model state'),\n",
" cluster('offline training', process('training'), artefact('data'), sync_edge('data', 'training')),\n",
" cluster('online predictions service', process('evaluate model'), artefact('prediction'),\n",
" artefact('unknown sample'), sync_edge('unknown sample', 'evaluate model')),\n",
" cluster('model monitoring', process('residual tracking'), actor('you'), sync_edge('residual tracking', 'you')),\n",
" sync_edge('training', 'model state'), dependency('evaluate model', 'model state'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user'),\n",
" async_edge('user', 'clickstream collection'), sync_edge('clickstream collection', 'feedback'), sync_edge('feedback', 'data'),\n",
" dependency('residual tracking', 'feedback')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"556pt\" height=\"462pt\"\n",
" viewBox=\"0.00 0.00 556.00 462.42\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 458.4244)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-458.4244 552,-458.4244 552,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"208,-86 208,-232 307,-232 307,-86 208,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"257.5\" y=\"-216.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-158 8,-396.744 167,-396.744 167,-158 8,-158\"/>\n",
"<text text-anchor=\"middle\" x=\"87.5\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster model&#45;monitoring</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"386,-240 386,-396.744 540,-396.744 540,-240 386,-240\"/>\n",
"<text text-anchor=\"middle\" x=\"463\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model monitoring</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"172\" cy=\"-429.5842\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"172\" y=\"-425.3842\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>clickstream&#45;collection</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"288\" cy=\"-348.744\" rx=\"87.8898\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"288\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">clickstream collection</text>\n",
"</g>\n",
"<!-- user&#45;&gt;clickstream&#45;collection -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>user&#45;&gt;clickstream&#45;collection</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M192.4714,-415.3177C209.6587,-403.3399 234.551,-385.9925 254.6168,-372.0087\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"256.6813,-374.8361 262.8844,-366.247 252.679,-369.0931 256.6813,-374.8361\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"139.7659,-366.744 40.2341,-366.744 40.2341,-370.744 28.2341,-370.744 28.2341,-330.744 139.7659,-330.744 139.7659,-366.744\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"28.2341,-366.744 40.2341,-366.744 \"/>\n",
"<text text-anchor=\"middle\" x=\"84\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M153.3375,-412.4401C141.1911,-401.2819 125.1368,-386.5339 111.5354,-374.0391\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"113.5908,-371.1746 103.8586,-366.9869 108.8552,-376.3296 113.5908,-371.1746\"/>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"321.0193,-289.372 266.9807,-289.372 266.9807,-293.372 254.9807,-293.372 254.9807,-253.372 321.0193,-253.372 321.0193,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"254.9807,-289.372 266.9807,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"288\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection&#45;&gt;feedback -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>clickstream&#45;collection&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M288,-330.4079C288,-321.254 288,-309.975 288,-299.7366\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"291.5001,-299.5765 288,-289.5765 284.5001,-299.5765 291.5001,-299.5765\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"291,-202 249,-202 249,-206 237,-206 237,-166 291,-166 291,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"237,-202 249,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"264\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- feedback&#45;&gt;data -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>feedback&#45;&gt;data</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M283.0272,-253.2685C279.7449,-241.3192 275.3795,-225.4271 271.6581,-211.8793\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"274.9903,-210.7961 268.9664,-202.0803 268.2403,-212.6503 274.9903,-210.7961\"/>\n",
"</g>\n",
"<!-- model&#45;state -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>model&#45;state</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"198.1486,-58 121.8514,-58 117.8514,-54 117.8514,-22 194.1486,-22 198.1486,-26 198.1486,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"194.1486,-54 117.8514,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"194.1486,-54 194.1486,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"194.1486,-54 198.1486,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"158\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state</text>\n",
"</g>\n",
"<!-- training -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>training</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"257\" cy=\"-112\" rx=\"37.7266\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"257\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training</text>\n",
"</g>\n",
"<!-- training&#45;&gt;model&#45;state -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>training&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M236.0046,-96.7307C223.0042,-87.2758 206.0245,-74.9269 191.2276,-64.1655\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"192.9602,-61.0979 182.8142,-58.0467 188.843,-66.759 192.9602,-61.0979\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M262.2336,-165.8314C261.485,-158.131 260.5947,-148.9743 259.7627,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.2415,-140.0276 258.7902,-130.4133 256.2744,-140.7051 263.2415,-140.0276\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"80\" cy=\"-271.372\" rx=\"63.7604\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"80\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;model&#45;state -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;model&#45;state</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M76.2854,-253.2183C72.3811,-230.4195 68.0621,-190.3681 78,-158 88.8693,-122.5982 114.3617,-88.2694 133.6705,-65.8529\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"136.473,-67.9668 140.4659,-58.1532 131.2246,-63.3348 136.473,-67.9668\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"159.2592,-202 98.7408,-202 98.7408,-206 86.7408,-206 86.7408,-166 159.2592,-166 159.2592,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"86.7408,-202 98.7408,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"123\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M88.9096,-253.2685C94.9058,-241.0849 102.9192,-224.8024 109.6701,-211.0852\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"112.8263,-212.5981 114.1018,-202.0803 106.5457,-209.5071 112.8263,-212.5981\"/>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M135.0648,-202.1214C141.501,-212.7144 148.9161,-226.6012 153,-240 168.9117,-292.2051 172.2056,-355.8653 172.5365,-394.5314\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.0369,-394.752 172.5593,-404.7441 176.0369,-394.7363 169.0369,-394.752\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M83.0521,-330.4079C82.5788,-321.254 81.9957,-309.975 81.4664,-299.7366\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"84.9529,-299.3824 80.9411,-289.5765 77.9622,-299.7439 84.9529,-299.3824\"/>\n",
"</g>\n",
"<!-- residual&#45;tracking -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>residual&#45;tracking</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"463\" cy=\"-348.744\" rx=\"69.0734\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"463\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">residual tracking</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;feedback -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M427.5861,-333.0867C399.5586,-320.695 360.3209,-303.347 330.5817,-290.1985\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"331.8474,-286.9313 321.2862,-286.0887 329.0168,-293.3335 331.8474,-286.9313\"/>\n",
"</g>\n",
"<!-- you -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>you</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"463\" cy=\"-271.372\" rx=\"23.2447\" ry=\"23.2447\"/>\n",
"<text text-anchor=\"middle\" x=\"463\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">you</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;you -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;you</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M463,-330.4079C463,-322.7636 463,-313.6373 463,-304.8726\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"466.5001,-304.8602 463,-294.8602 459.5001,-304.8602 466.5001,-304.8602\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10bd4e630>"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Side track: attribution modelling\n",
"- Did the user convert because of your recommendation or because the product became more popular\n",
"- Was there a clickthrough because you made the recommendation or because the regular search results were horrible\n",
"- Etc.\n",
"\n",
"## See this talk by Ruben Mak:\n",
"### http://snowplowanalytics.com/assets/pdf/conversion-attribution-on-snowplow-data-at-blue-mango.pdf"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" actor('user'), process('clickstream collection'), artefact('feedback'), state('model state A'),\n",
" state('model state B'),\n",
" cluster('offline training', process('training A'), process('training B'), artefact('data'),\n",
" sync_edge('data', 'training A'), sync_edge('data', 'training B')),\n",
" cluster('online predictions service', process('evaluate model A'), process('evaluate model B'),\n",
" artefact('prediction'), artefact('unknown sample'), sync_edge('unknown sample', 'evaluate model A'),\n",
" sync_edge('unknown sample', 'evaluate model B')),\n",
" cluster('model monitoring', process('residual tracking'), actor('you'), sync_edge('residual tracking', 'you')),\n",
" sync_edge('training A', 'model state A'), dependency('evaluate model A', 'model state A'),\n",
" sync_edge('evaluate model', 'prediction'), sync_edge('user', 'unknown sample'), sync_edge('prediction', 'user'),\n",
" async_edge('user', 'clickstream collection'), sync_edge('clickstream collection', 'feedback'),\n",
" sync_edge('feedback', 'data'),\n",
" dependency('residual tracking', 'feedback'), dependency('evaluate model B', 'model state B'),\n",
" sync_edge('training B', 'model state B')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"686pt\" height=\"462pt\"\n",
" viewBox=\"0.00 0.00 685.94 462.42\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 458.4244)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-458.4244 681.9449,-458.4244 681.9449,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"338.9724\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"352.9449,-86 352.9449,-232 569.9449,-232 569.9449,-86 352.9449,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"461.4449\" y=\"-216.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"347.9449,-245.372 347.9449,-396.744 669.9449,-396.744 669.9449,-245.372 347.9449,-245.372\"/>\n",
"<text text-anchor=\"middle\" x=\"508.9449\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster model&#45;monitoring</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"185.9449,-240 185.9449,-396.744 339.9449,-396.744 339.9449,-240 185.9449,-240\"/>\n",
"<text text-anchor=\"middle\" x=\"262.9449\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model monitoring</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"427.9449\" cy=\"-429.5842\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"427.9449\" y=\"-425.3842\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>clickstream&#45;collection</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"87.9449\" cy=\"-348.744\" rx=\"87.8898\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"87.9449\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">clickstream collection</text>\n",
"</g>\n",
"<!-- user&#45;&gt;clickstream&#45;collection -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>user&#45;&gt;clickstream&#45;collection</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M402.8757,-427.324C348.8186,-422.2741 222.8711,-409.5125 181.9449,-396.744 162.1675,-390.5738 141.5243,-380.491 124.6378,-371.1553\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"126.098,-367.96 115.6722,-366.0752 122.6471,-374.0502 126.098,-367.96\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"483.7108,-366.744 384.1789,-366.744 384.1789,-370.744 372.1789,-370.744 372.1789,-330.744 483.7108,-330.744 483.7108,-366.744\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"372.1789,-366.744 384.1789,-366.744 \"/>\n",
"<text text-anchor=\"middle\" x=\"427.9449\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- user&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>user&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M427.9449,-404.449C427.9449,-395.8157 427.9449,-386.0915 427.9449,-377.2126\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"431.445,-376.9318 427.9449,-366.9318 424.445,-376.9318 431.445,-376.9318\"/>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"177.9642,-289.372 123.9256,-289.372 123.9256,-293.372 111.9256,-293.372 111.9256,-253.372 177.9642,-253.372 177.9642,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"111.9256,-289.372 123.9256,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"144.9449\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection&#45;&gt;feedback -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>clickstream&#45;collection&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M101.1651,-330.7989C108.3793,-321.0063 117.4479,-308.6965 125.4578,-297.8239\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"128.4855,-299.615 131.5989,-289.4879 122.8497,-295.4631 128.4855,-299.615\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"433.9449,-202 391.9449,-202 391.9449,-206 379.9449,-206 379.9449,-166 433.9449,-166 433.9449,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"379.9449,-202 391.9449,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"406.9449\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- feedback&#45;&gt;data -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>feedback&#45;&gt;data</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M162.9324,-253.2668C168.6239,-248.3608 175.1995,-243.457 181.9449,-240 243.429,-208.4891 323.6043,-194.0592 369.7724,-187.9705\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"370.4319,-191.4152 379.9173,-186.6954 369.5588,-184.4699 370.4319,-191.4152\"/>\n",
"</g>\n",
"<!-- model&#45;state&#45;a -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>model&#45;state&#45;a</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"581.438,-58 492.4517,-58 488.4517,-54 488.4517,-22 577.438,-22 581.438,-26 581.438,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"577.438,-54 488.4517,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"577.438,-54 577.438,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"577.438,-54 581.438,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"534.9449\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state A</text>\n",
"</g>\n",
"<!-- model&#45;state&#45;b -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>model&#45;state&#45;b</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"434.4312,-58 345.4585,-58 341.4585,-54 341.4585,-22 430.4312,-22 434.4312,-26 434.4312,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"430.4312,-54 341.4585,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"430.4312,-54 430.4312,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"430.4312,-54 434.4312,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"387.9449\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state B</text>\n",
"</g>\n",
"<!-- training&#45;a -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>training&#45;a</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"515.9449\" cy=\"-112\" rx=\"45.9548\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"515.9449\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training A</text>\n",
"</g>\n",
"<!-- training&#45;a&#45;&gt;model&#45;state&#45;a -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>training&#45;a&#45;&gt;model&#45;state&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M520.7394,-93.8314C522.7938,-86.0463 525.2409,-76.7729 527.5204,-68.1347\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"530.9183,-68.9753 530.0858,-58.4133 524.15,-67.1892 530.9183,-68.9753\"/>\n",
"</g>\n",
"<!-- training&#45;b -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>training&#45;b</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"406.9449\" cy=\"-112\" rx=\"45.9461\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"406.9449\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training B</text>\n",
"</g>\n",
"<!-- training&#45;b&#45;&gt;model&#45;state&#45;b -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>training&#45;b&#45;&gt;model&#45;state&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M402.1504,-93.8314C400.096,-86.0463 397.6488,-76.7729 395.3693,-68.1347\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"398.7397,-67.1892 392.8039,-58.4133 391.9714,-68.9753 398.7397,-67.1892\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training&#45;a -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M434.169,-166.0171C449.279,-156.0362 468.1577,-143.5658 483.9678,-133.1225\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"485.9771,-135.9899 492.3921,-127.5578 482.119,-130.1491 485.9771,-135.9899\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training&#45;b -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>data&#45;&gt;training&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M406.9449,-165.8314C406.9449,-158.131 406.9449,-148.9743 406.9449,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"410.445,-140.4132 406.9449,-130.4133 403.445,-140.4133 410.445,-140.4132\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;a -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>evaluate&#45;model&#45;a</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"589.9449\" cy=\"-271.372\" rx=\"71.9876\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"589.9449\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model A</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;a&#45;&gt;model&#45;state&#45;a -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;a&#45;&gt;model&#45;state&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M591.9161,-253.1425C594.8683,-218.8981 597.7917,-143.2526 573.9449,-86 571.0111,-78.9565 566.5873,-72.1955 561.7594,-66.1269\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"564.2083,-63.6073 555.0276,-58.3192 558.9068,-68.1783 564.2083,-63.6073\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;b -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>evaluate&#45;model&#45;b</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"427.9449\" cy=\"-271.372\" rx=\"71.979\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"427.9449\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model B</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;b&#45;&gt;model&#45;state&#45;b -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;b&#45;&gt;model&#45;state&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M380.1143,-257.7727C367.8579,-251.8892 356.1226,-243.597 348.9449,-232 314.795,-176.8243 326.5962,-146.9188 348.9449,-86 351.5728,-78.8368 355.8649,-72.0242 360.6608,-65.9431\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"363.5138,-67.9946 367.404,-58.1398 358.2173,-63.4177 363.5138,-67.9946\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"574.2041,-366.744 513.6857,-366.744 513.6857,-370.744 501.6857,-370.744 501.6857,-330.744 574.2041,-330.744 574.2041,-366.744\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"501.6857,-366.744 513.6857,-366.744 \"/>\n",
"<text text-anchor=\"middle\" x=\"537.9449\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M524.8311,-367.0741C516.7099,-377.1841 505.4599,-389.1841 492.9449,-396.744 481.5005,-403.6572 476.0611,-399.0905 463.9449,-404.744 461.4504,-405.908 458.9406,-407.2403 456.4697,-408.6701\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"454.3786,-405.851 447.7894,-414.1476 458.1142,-411.7709 454.3786,-405.851\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;a -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M465.9267,-330.6037C490.224,-318.9992 521.7965,-303.92 547.0043,-291.8807\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"548.8101,-294.8969 556.3254,-287.4289 545.7933,-288.5804 548.8101,-294.8969\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;b -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M427.9449,-330.4079C427.9449,-321.254 427.9449,-309.975 427.9449,-299.7366\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"431.445,-299.5765 427.9449,-289.5765 424.445,-299.5765 431.445,-299.5765\"/>\n",
"</g>\n",
"<!-- residual&#45;tracking -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>residual&#45;tracking</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"262.9449\" cy=\"-348.744\" rx=\"69.0734\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"262.9449\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">residual tracking</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;feedback -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M237.3406,-331.9555C220.9139,-321.1845 199.3374,-307.0369 181.1663,-295.1223\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"182.8389,-292.0337 172.5571,-289.4772 179.0005,-297.8875 182.8389,-292.0337\"/>\n",
"</g>\n",
"<!-- you -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>you</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"262.9449\" cy=\"-271.372\" rx=\"23.2447\" ry=\"23.2447\"/>\n",
"<text text-anchor=\"middle\" x=\"262.9449\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">you</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;you -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;you</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M262.9449,-330.4079C262.9449,-322.7636 262.9449,-313.6373 262.9449,-304.8726\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"266.445,-304.8602 262.9449,-294.8602 259.445,-304.8602 266.445,-304.8602\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"537.9449\" cy=\"-429.5842\" rx=\"64.7286\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"537.9449\" y=\"-425.3842\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate&#45;model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M537.9449,-411.2403C537.9449,-401.2145 537.9449,-388.5747 537.9449,-377.2899\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"541.445,-377.0153 537.9449,-367.0153 534.445,-377.0154 541.445,-377.0153\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10de8b400>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# On experimentation\n",
"- The experiments that a user is exposed to are part of the context\n",
" - Context of the prediction\n",
" - Context of the feedback\n",
"- Clickstream collection needs to log full context for valuable data\n",
"- Residuals should be explained in context"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"diagram = graph('Simple Prediction Service',\n",
" actor('user'), process('clickstream collection'),\n",
" artefact('feedback'), state('model state A'),\n",
" state('model state B'),\n",
" cluster('offline training',\n",
" process('training A'),\n",
" process('training B'),\n",
" artefact('data'),\n",
" sync_edge('data', 'training A'),\n",
" sync_edge('data', 'training B')),\n",
" cluster('online predictions service',\n",
" process('evaluate model A'),\n",
" process('evaluate model B'),\n",
" artefact('prediction'),\n",
" artefact('unknown sample'),\n",
" sync_edge('unknown sample', 'evaluate model A'),\n",
" sync_edge('unknown sample', 'evaluate model B')),\n",
" cluster('model monitoring',\n",
" process('residual tracking'),\n",
" actor('you'),\n",
" sync_edge('residual tracking', 'you')),\n",
" cluster('experimentation service',\n",
" artefact('experiment definitions'),\n",
" process('experiment routing'),\n",
" dependency('experiment routing', 'experiment definitions'),\n",
" sync_edge('experiment routing', 'unknown sample')),\n",
" sync_edge('training A', 'model state A'),\n",
" dependency('evaluate model A', 'model state A'),\n",
" sync_edge('evaluate model', 'prediction'),\n",
" sync_edge('user', 'experiment routing'),\n",
" sync_edge('prediction', 'user'),\n",
" async_edge('user', 'clickstream collection'),\n",
" sync_edge('clickstream collection', 'feedback'),\n",
" sync_edge('feedback', 'data'),\n",
" dependency('residual tracking', 'feedback'),\n",
" dependency('evaluate model B', 'model state B'),\n",
" dependency('clickstream collection', 'experiment definitions'),\n",
" sync_edge('training B', 'model state B')\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: %3 Pages: 1 -->\n",
"<svg width=\"720pt\" height=\"380pt\"\n",
" viewBox=\"0.00 0.00 720.00 380.07\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(.8219 .8219) rotate(0) translate(4 458.4244)\">\n",
"<title>%3</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-458.4244 872,-458.4244 872,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"434\" y=\"-6.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Simple Prediction Service</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster offline&#45;training</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"313,-86 313,-232 530,-232 530,-86 313,-86\"/>\n",
"<text text-anchor=\"middle\" x=\"421.5\" y=\"-216.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">offline training</text>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster online&#45;predictions&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"538,-158 538,-319.372 860,-319.372 860,-158 538,-158\"/>\n",
"<text text-anchor=\"middle\" x=\"699\" y=\"-304.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">online predictions service</text>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster model&#45;monitoring</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"8,-240 8,-396.744 162,-396.744 162,-240 8,-240\"/>\n",
"<text text-anchor=\"middle\" x=\"85\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model monitoring</text>\n",
"</g>\n",
"<g id=\"clust4\" class=\"cluster\">\n",
"<title>cluster experimentation&#45;service</title>\n",
"<polygon fill=\"none\" stroke=\"#0000ff\" points=\"358,-245.372 358,-396.744 530,-396.744 530,-245.372 358,-245.372\"/>\n",
"<text text-anchor=\"middle\" x=\"444\" y=\"-381.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">experimentation service</text>\n",
"</g>\n",
"<!-- user -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>user</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"444\" cy=\"-429.5842\" rx=\"24.6814\" ry=\"24.6814\"/>\n",
"<text text-anchor=\"middle\" x=\"444\" y=\"-425.3842\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">user</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>clickstream&#45;collection</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"260\" cy=\"-348.744\" rx=\"87.8898\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"260\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">clickstream collection</text>\n",
"</g>\n",
"<!-- user&#45;&gt;clickstream&#45;collection -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>user&#45;&gt;clickstream&#45;collection</title>\n",
"<path fill=\"none\" stroke=\"#ff0000\" stroke-dasharray=\"5,2\" d=\"M420.3818,-421.8506C402.0461,-415.6355 376.109,-406.3796 354,-396.744 335.8582,-388.8374 316.2935,-379.0591 299.7354,-370.3954\"/>\n",
"<polygon fill=\"#ff0000\" stroke=\"#ff0000\" points=\"301.3511,-367.2906 290.8739,-365.716 298.0823,-373.4806 301.3511,-367.2906\"/>\n",
"</g>\n",
"<!-- experiment&#45;routing -->\n",
"<g id=\"node16\" class=\"node\">\n",
"<title>experiment&#45;routing</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"444\" cy=\"-348.744\" rx=\"77.784\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"444\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">experiment routing</text>\n",
"</g>\n",
"<!-- user&#45;&gt;experiment&#45;routing -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>user&#45;&gt;experiment&#45;routing</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M444,-404.449C444,-395.8157 444,-386.0915 444,-377.2126\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"447.5001,-376.9318 444,-366.9318 440.5001,-376.9318 447.5001,-376.9318\"/>\n",
"</g>\n",
"<!-- feedback -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>feedback</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"293.0193,-289.372 238.9807,-289.372 238.9807,-293.372 226.9807,-293.372 226.9807,-253.372 293.0193,-253.372 293.0193,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"226.9807,-289.372 238.9807,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"260\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">feedback</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection&#45;&gt;feedback -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>clickstream&#45;collection&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M260,-330.4079C260,-321.254 260,-309.975 260,-299.7366\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.5001,-299.5765 260,-289.5765 256.5001,-299.5765 263.5001,-299.5765\"/>\n",
"</g>\n",
"<!-- experiment&#45;definitions -->\n",
"<g id=\"node15\" class=\"node\">\n",
"<title>experiment&#45;definitions</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"510.5904,-289.372 381.4096,-289.372 381.4096,-293.372 369.4096,-293.372 369.4096,-253.372 510.5904,-253.372 510.5904,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"369.4096,-289.372 381.4096,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"440\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">experiment definitions</text>\n",
"</g>\n",
"<!-- clickstream&#45;collection&#45;&gt;experiment&#45;definitions -->\n",
"<g id=\"edge18\" class=\"edge\">\n",
"<title>clickstream&#45;collection&#45;&gt;experiment&#45;definitions</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M298.1734,-332.3354C324.505,-321.0169 359.8151,-305.8391 388.6152,-293.4595\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"390.3052,-296.5428 398.1103,-289.3781 387.5408,-290.1117 390.3052,-296.5428\"/>\n",
"</g>\n",
"<!-- data -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>data</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"394,-202 352,-202 352,-206 340,-206 340,-166 394,-166 394,-202\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"340,-202 352,-202 \"/>\n",
"<text text-anchor=\"middle\" x=\"367\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">data</text>\n",
"</g>\n",
"<!-- feedback&#45;&gt;data -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>feedback&#45;&gt;data</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M282.1705,-253.2685C297.9519,-240.382 319.3489,-222.91 336.7047,-208.7379\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"339.3259,-211.1162 344.8579,-202.0803 334.8985,-205.6942 339.3259,-211.1162\"/>\n",
"</g>\n",
"<!-- model&#45;state&#45;a -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>model&#45;state&#45;a</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"689.4932,-58 600.5068,-58 596.5068,-54 596.5068,-22 685.4932,-22 689.4932,-26 689.4932,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"685.4932,-54 596.5068,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"685.4932,-54 685.4932,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"685.4932,-54 689.4932,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"643\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state A</text>\n",
"</g>\n",
"<!-- model&#45;state&#45;b -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>model&#45;state&#45;b</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"521.4863,-58 432.5137,-58 428.5137,-54 428.5137,-22 517.4863,-22 521.4863,-26 521.4863,-58\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"517.4863,-54 428.5137,-54 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"517.4863,-54 517.4863,-22 \"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"517.4863,-54 521.4863,-58 \"/>\n",
"<text text-anchor=\"middle\" x=\"475\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">model state B</text>\n",
"</g>\n",
"<!-- training&#45;a -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>training&#45;a</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"476\" cy=\"-112\" rx=\"45.9548\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"476\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training A</text>\n",
"</g>\n",
"<!-- training&#45;a&#45;&gt;model&#45;state&#45;a -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>training&#45;a&#45;&gt;model&#45;state&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M507.02,-98.6261C530.7302,-88.4037 563.9344,-74.0882 591.5957,-62.1623\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"593.3268,-65.2275 601.124,-58.0543 590.5554,-58.7994 593.3268,-65.2275\"/>\n",
"</g>\n",
"<!-- training&#45;b -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>training&#45;b</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"367\" cy=\"-112\" rx=\"45.9461\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"367\" y=\"-107.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">training B</text>\n",
"</g>\n",
"<!-- training&#45;b&#45;&gt;model&#45;state&#45;b -->\n",
"<g id=\"edge19\" class=\"edge\">\n",
"<title>training&#45;b&#45;&gt;model&#45;state&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M390.4344,-96.3771C404.6722,-86.8852 423.1371,-74.5753 439.1788,-63.8808\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"441.4203,-66.593 447.7993,-58.1338 437.5374,-60.7686 441.4203,-66.593\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training&#45;a -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>data&#45;&gt;training&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M394.2241,-166.0171C409.3341,-156.0362 428.2128,-143.5658 444.0229,-133.1225\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"446.0323,-135.9899 452.4472,-127.5578 442.1741,-130.1491 446.0323,-135.9899\"/>\n",
"</g>\n",
"<!-- data&#45;&gt;training&#45;b -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>data&#45;&gt;training&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M367,-165.8314C367,-158.131 367,-148.9743 367,-140.4166\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"370.5001,-140.4132 367,-130.4133 363.5001,-140.4133 370.5001,-140.4132\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;a -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>evaluate&#45;model&#45;a</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"780\" cy=\"-184\" rx=\"71.9876\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"780\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model A</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;a&#45;&gt;model&#45;state&#45;a -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;a&#45;&gt;model&#45;state&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M763.2011,-166.3428C739.1952,-141.1103 694.9358,-94.5894 667.3408,-65.5845\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"669.7971,-63.0885 660.3685,-58.256 664.7256,-67.9134 669.7971,-63.0885\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;b -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>evaluate&#45;model&#45;b</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"618\" cy=\"-184\" rx=\"71.979\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"618\" y=\"-179.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate model B</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;b&#45;&gt;model&#45;state&#45;b -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;b&#45;&gt;model&#45;state&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M604.4162,-166.0712C588.5675,-145.6714 561.0685,-111.8405 534,-86 526.1685,-78.5238 517.1815,-71.0391 508.6218,-64.3441\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"510.6636,-61.4992 500.5978,-58.1932 506.4049,-67.0547 510.6636,-61.4992\"/>\n",
"</g>\n",
"<!-- prediction -->\n",
"<g id=\"node11\" class=\"node\">\n",
"<title>prediction</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"756.2592,-289.372 695.7408,-289.372 695.7408,-293.372 683.7408,-293.372 683.7408,-253.372 756.2592,-253.372 756.2592,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"683.7408,-289.372 695.7408,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"720\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">prediction</text>\n",
"</g>\n",
"<!-- prediction&#45;&gt;user -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>prediction&#45;&gt;user</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M723.3392,-289.7243C727.172,-317.19 729.6595,-368.7449 701,-396.744 685.3859,-411.9983 545.6857,-423.0009 479.0566,-427.429\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"478.7719,-423.9401 469.0206,-428.0829 479.2271,-430.9253 478.7719,-423.9401\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample -->\n",
"<g id=\"node12\" class=\"node\">\n",
"<title>unknown&#45;sample</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"665.7659,-289.372 566.2341,-289.372 566.2341,-293.372 554.2341,-293.372 554.2341,-253.372 665.7659,-253.372 665.7659,-289.372\"/>\n",
"<polyline fill=\"none\" stroke=\"#000000\" points=\"554.2341,-289.372 566.2341,-289.372 \"/>\n",
"<text text-anchor=\"middle\" x=\"610\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">unknown sample</text>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;a -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;a</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M645.3909,-253.2791C654.8972,-248.6988 665.2478,-243.9599 675,-240 685.4176,-235.7699 688.7722,-236.6703 699,-232 714.8568,-224.7593 731.5584,-215.2218 745.6495,-206.5575\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"747.8755,-209.2934 754.4972,-201.0228 744.1632,-203.3589 747.8755,-209.2934\"/>\n",
"</g>\n",
"<!-- unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;b -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>unknown&#45;sample&#45;&gt;evaluate&#45;model&#45;b</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M611.6576,-253.2685C612.741,-241.4363 614.1783,-225.7384 615.4108,-212.2785\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"618.918,-212.3579 616.3445,-202.0803 611.9472,-211.7195 618.918,-212.3579\"/>\n",
"</g>\n",
"<!-- residual&#45;tracking -->\n",
"<g id=\"node13\" class=\"node\">\n",
"<title>residual&#45;tracking</title>\n",
"<ellipse fill=\"#d3d3d3\" stroke=\"#000000\" cx=\"85\" cy=\"-348.744\" rx=\"69.0734\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"85\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">residual tracking</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;feedback -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;feedback</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M127.4308,-334.4794C139.9763,-329.9617 153.6531,-324.7383 166,-319.372 183.2793,-311.862 201.8421,-302.6414 217.87,-294.2959\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"219.7632,-297.2549 226.9852,-289.5029 216.5053,-291.0592 219.7632,-297.2549\"/>\n",
"</g>\n",
"<!-- you -->\n",
"<g id=\"node14\" class=\"node\">\n",
"<title>you</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"85\" cy=\"-271.372\" rx=\"23.2447\" ry=\"23.2447\"/>\n",
"<text text-anchor=\"middle\" x=\"85\" y=\"-267.172\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">you</text>\n",
"</g>\n",
"<!-- residual&#45;tracking&#45;&gt;you -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>residual&#45;tracking&#45;&gt;you</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M85,-330.4079C85,-322.7636 85,-313.6373 85,-304.8726\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.5001,-304.8602 85,-294.8602 81.5001,-304.8602 88.5001,-304.8602\"/>\n",
"</g>\n",
"<!-- experiment&#45;routing&#45;&gt;unknown&#45;sample -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>experiment&#45;routing&#45;&gt;unknown&#45;sample</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M493.8987,-334.8909C507.1869,-330.5495 521.3564,-325.3149 534,-319.372 548.4588,-312.5759 563.5074,-303.5391 576.3619,-295.1406\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"578.4978,-297.9232 584.8764,-289.4636 574.6145,-292.099 578.4978,-297.9232\"/>\n",
"</g>\n",
"<!-- experiment&#45;routing&#45;&gt;experiment&#45;definitions -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>experiment&#45;routing&#45;&gt;experiment&#45;definitions</title>\n",
"<path fill=\"none\" stroke=\"#000000\" stroke-dasharray=\"5,2\" d=\"M443.0521,-330.4079C442.5788,-321.254 441.9957,-309.975 441.4664,-299.7366\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"444.9529,-299.3824 440.9411,-289.5765 437.9622,-299.7439 444.9529,-299.3824\"/>\n",
"</g>\n",
"<!-- evaluate&#45;model -->\n",
"<g id=\"node17\" class=\"node\">\n",
"<title>evaluate&#45;model</title>\n",
"<ellipse fill=\"none\" stroke=\"#000000\" cx=\"627\" cy=\"-348.744\" rx=\"64.7286\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"627\" y=\"-344.544\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">evaluate&#45;model</text>\n",
"</g>\n",
"<!-- evaluate&#45;model&#45;&gt;prediction -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>evaluate&#45;model&#45;&gt;prediction</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M656.281,-332.5546C662.6729,-328.5537 669.2424,-324.0603 675,-319.372 682.9359,-312.91 690.8288,-305.0918 697.7367,-297.6583\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"700.7029,-299.5955 704.8015,-289.8255 695.5048,-294.9071 700.7029,-299.5955\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.dot.Digraph at 0x10ba047f0>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diagram.graph_attr.update(size='10!,')\n",
"diagram"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"900\"\n",
" height=\"600\"\n",
" src=\"https://facebook.github.io/planout/\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x10b324b38>"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"IFrame('https://facebook.github.io/planout/', 900, 600)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Conclusions"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Models are stateful\n",
"\n",
"### Training produces model state\n",
"### Prediction uses model state\n",
"### *It helps to keep those concerns strictly separate*"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Under contention, prioritise prediction over training\n",
"\n",
"### This only works if those are separately solved concerns"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# And never train on out-of-order data\n",
"### Add to ground truth before re-training or incrementally training"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Data collection really is the hardest part\n",
"### It's a cross cutting concern and interferes with everything\n",
"### It may slow down feature development"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Don't attribute to your model what must be attributed to the market\n",
"### Or to another model\n",
"### Or to product improvements\n",
"### Or&hellip;"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Consider everything an experiment\n",
"### New versions of models\n",
"### Product releases\n",
"### Anything that changes the user's context\n",
"### And then that context becomes part of the data"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"900\"\n",
" height=\"600\"\n",
" src=\"https://careers.fashiontrade.com/\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x10b324e80>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"IFrame('https://careers.fashiontrade.com/', 900, 600)"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"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.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment