{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Timing Experiment" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.colors as mcolors\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "import detect_simpsons_paradox as dsp\n", "import sp_data_util as sp_dat\n", "import time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will draw samples from a number of clusters according to a Gaussian Mixture Model and add both continuous and categorical noise values. \n", "\n", "First we have to set up the number of clusters, samples and extra values. \n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# set the data size\n", "N = int(10**5)\n", "# and 5 extra continuous attributes and 5 extra categorical attributes\n", "num_clusters = 32\n", "numExtra = 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we generate cluseters that are roughly distributed with a positive trend that will help us ensure that SP occurs throughout the dataset" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mu = np.asarray([[1,1],[5,5]])\n", "\n", "variance = 1000\n", "\n", "# generate rest of the mu\n", "for i in range(num_clusters - 2):\n", " mu_x = np.random.randint(10, 99);\n", " mu_y = np.random.normal(mu_x, np.sqrt(variance))\n", " mu_new = np.asarray([mu_x,mu_y])\n", " mu = np.append(mu,[mu_new],axis=0)\n", "\n", "plt.scatter(mu[:,0],mu[:,1])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we use a built in function to our package that takes a list of means and a covariance " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/smb/anaconda2/envs/simpsonsparadox/lib/python3.6/site-packages/sp_data_util/SPData.py:134: RuntimeWarning: covariance is not positive-semidefinite.\n", " x = np.asarray([np.random.multivariate_normal(mu[z_i],cov) for z_i in z])\n" ] } ], "source": [ "# covariance of each cluster\n", "cov = [[.6,-1],[0,.6]]\n", "\n", "# call mixed_regression_sp to generate the data set\n", "latent_df = sp_dat.mixed_regression_sp_extra(N,mu,cov, numExtra)\n", " " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 3, 3, 2, 2, 2, 4, 0, 1, 2, 1, 3, 0, 3, 4, 3, 4, 0, 3, 4])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.choice(range(5),20,)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 26\n", "1 27\n", "2 0\n", "3 8\n", "4 8\n", "Name: cluster, dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "latent_df['cluster'].head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(latent_df['x1'], latent_df['x2'],\n", " c = latent_df['cluster'], marker= 'o')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(100000, 13)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check the size of the data\n", "latent_df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we store the data in a pandas dataframe, we can easily sample a subset of the rows and we can check how that works:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x1x2clustercon_0con_1con_2con_3con_4cat_0cat_1cat_2cat_3cat_4
4778740.2853558.279074442.821083-5.9459829.11658447.626833-7.2336637054279196
9721034.1705754.50437929-17.100323-29.930051-157.99335726.58118174.0245407264231360
4252119.381192-21.54557628-168.137523-76.675448146.536801168.084883178.4688239216668976
9645251.97514261.5562681135.396721109.82601098.528868-37.957128-179.428724584705471
4711542.53239440.353842691.51516099.488643-24.809279-95.285213145.3792525295827579
\n", "
" ], "text/plain": [ " x1 x2 cluster con_0 con_1 con_2 \\\n", "47787 40.285355 8.279074 4 42.821083 -5.945982 9.116584 \n", "97210 34.170575 4.504379 29 -17.100323 -29.930051 -157.993357 \n", "42521 19.381192 -21.545576 28 -168.137523 -76.675448 146.536801 \n", "96452 51.975142 61.556268 11 35.396721 109.826010 98.528868 \n", "47115 42.532394 40.353842 6 91.515160 99.488643 -24.809279 \n", "\n", " con_3 con_4 cat_0 cat_1 cat_2 cat_3 cat_4 \n", "47787 47.626833 -7.233663 70 54 27 91 96 \n", "97210 26.581181 74.024540 72 64 23 13 60 \n", "42521 168.084883 178.468823 92 16 66 89 76 \n", "96452 -37.957128 -179.428724 58 4 70 54 71 \n", "47115 -95.285213 145.379252 52 95 82 75 79 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset_df = latent_df.sample(frac=.1) \n", "print(len(subset_df))\n", "subset_df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can do the Time experiment for the whole dataset and the sampled dataset." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# whole data set\n", "data_portions = np.linspace(.1,1,10)\n", "\n", "time_data = []\n", "\n", "for cur_portion in data_portions:\n", " start_time = time.time()\n", " dsp.detect_simpsons_paradox(latent_df.sample(frac=cur_portion))\n", " time_data.append([cur_portion, (time.time() - start_time)])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
portion of datatime
00.13.679361
10.23.910151
20.33.797533
30.44.676100
40.53.796321
50.64.221745
60.74.523880
70.84.056846
80.95.073282
91.05.017606
\n", "
" ], "text/plain": [ " portion of data time\n", "0 0.1 3.679361\n", "1 0.2 3.910151\n", "2 0.3 3.797533\n", "3 0.4 4.676100\n", "4 0.5 3.796321\n", "5 0.6 4.221745\n", "6 0.7 4.523880\n", "7 0.8 4.056846\n", "8 0.9 5.073282\n", "9 1.0 5.017606" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_res = pd.DataFrame(data = time_data, columns =['portion of data','time'])\n", "time_res # show the results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Computing it just once, is not the most indicative, so we can repeat the experiment and then compute statistics on that. We repeat it 4 more times to get a total of 5" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "num_repeats = 4\n", "\n", "for cur_portion in np.repeat(data_portions,num_repeats):\n", " start_time = time.time()\n", " dsp.detect_simpsons_paradox(latent_df.sample(frac=cur_portion))\n", " time_data.append([cur_portion, (time.time() - start_time)])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "50" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_res = pd.DataFrame(data = time_data, columns =['portion','time'])\n", "len(time_res)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have 50 rows in our result table and we can compute the statistics that we want. We want to first, group the data by the portion of the data so that we can compute the mean and variance of all of the trials of each portion. " ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
time
countmeanstdmin25%50%75%max
portion
0.15.04.4464970.8267053.6793613.8126364.0618625.3137675.364857
0.25.04.2569700.2597003.9101514.0607274.3799424.4052774.528751
0.35.04.7047180.9293173.7975334.1715794.3235875.0942946.136595
0.45.03.9368460.4188503.6664403.7356023.7491043.8569854.676100
0.55.04.4561020.7529063.7963214.0263594.1291144.6460395.682674
0.65.04.5403010.6072444.1374534.1732154.2217454.5925805.576510
0.75.04.5452140.5089784.0063324.0979224.5238804.9115305.186406
0.85.04.2892200.5945783.7915773.8390774.0568464.5526315.205971
0.95.04.3183490.4531693.9688184.0457364.0999374.4039755.073282
1.05.04.4962780.5736713.9036253.9983214.4045085.0176065.157329
\n", "
" ], "text/plain": [ " time \\\n", " count mean std min 25% 50% 75% \n", "portion \n", "0.1 5.0 4.446497 0.826705 3.679361 3.812636 4.061862 5.313767 \n", "0.2 5.0 4.256970 0.259700 3.910151 4.060727 4.379942 4.405277 \n", "0.3 5.0 4.704718 0.929317 3.797533 4.171579 4.323587 5.094294 \n", "0.4 5.0 3.936846 0.418850 3.666440 3.735602 3.749104 3.856985 \n", "0.5 5.0 4.456102 0.752906 3.796321 4.026359 4.129114 4.646039 \n", "0.6 5.0 4.540301 0.607244 4.137453 4.173215 4.221745 4.592580 \n", "0.7 5.0 4.545214 0.508978 4.006332 4.097922 4.523880 4.911530 \n", "0.8 5.0 4.289220 0.594578 3.791577 3.839077 4.056846 4.552631 \n", "0.9 5.0 4.318349 0.453169 3.968818 4.045736 4.099937 4.403975 \n", "1.0 5.0 4.496278 0.573671 3.903625 3.998321 4.404508 5.017606 \n", "\n", " \n", " max \n", "portion \n", "0.1 5.364857 \n", "0.2 4.528751 \n", "0.3 6.136595 \n", "0.4 4.676100 \n", "0.5 5.682674 \n", "0.6 5.576510 \n", "0.7 5.186406 \n", "0.8 5.205971 \n", "0.9 5.073282 \n", "1.0 5.157329 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_repeats = time_res.groupby('portion')\n", "time_repeats.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can plot the means to see if there's a clear trend" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "time_repeats.mean().plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }