{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Causal Structures - applied on the California School data set" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pydataset\n", "import pylab as pl\n", "\n", "from halerium import CausalStructure\n", "from halerium import Evaluator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The California Test Score Data Set" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example we apply the `CausalStructure` class to the California Test Score Data Set. The preferred data format to use with `CausalStructure` is the pandas `DataFrame`." ] }, { "cell_type": "code", "execution_count": 2, "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", " \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", "
distcodcountydistrictgrspanenrltotteacherscalwpctmealpctcomputertestscrcompstuexpnstustravgincelpctreadscrmathscr
175119AlamedaSunol Glen UnifiedKK-0819510.9000000.5102002.04080067690.7999880.3435906384.91113317.88991022.6900010.000000691.599976690.000000
261499ButteManzanita ElementaryKK-0824011.15000015.41670047.916698101661.2000120.4208335099.38085921.5246649.8240004.583333660.500000661.900024
361549ButteThermalito Union ElementaryKK-08155082.90000255.03229976.322601169643.5999760.1090325501.95459018.6972268.97800030.000002636.299988650.900024
461457ButteGolden Feather Union ElementaryKK-0824314.00000036.47539977.04920285647.7000120.3497947101.83105517.3571438.9780000.000000651.900024643.500000
561523ButtePalermo Union ElementaryKK-08133571.50000033.10860178.427002171640.8499760.1280905235.98779318.6713299.08033313.857677641.799988639.900024
......................................................
41668957San MateoLas Lomitas ElementaryKK-0898459.7300000.1016003.556900195704.3000490.1981717290.33886716.47413428.7169995.995935700.900024707.700012
41769518Santa ClaraLos Altos ElementaryKK-083724208.4799961.0741001.503800721706.7500000.1936095741.46289117.86262541.7341084.726101704.000000709.500000
41872611VenturaSomis Union ElementaryKK-0844120.1500003.56350037.19380245645.0000000.1020414402.83154321.88585723.73300024.263039648.299988641.700012
41972744YubaPlumas ElementaryKK-081015.00000011.88120059.40589914672.2000120.1386144776.33642620.2000019.9520002.970297667.900024676.500000
42072751YubaWheatland ElementaryKK-08177893.4000026.92350047.571201313655.7500000.1760415993.39257819.03640212.5020005.005624660.500000651.000000
\n", "

420 rows × 17 columns

\n", "
" ], "text/plain": [ " distcod county district grspan enrltot \\\n", "1 75119 Alameda Sunol Glen Unified KK-08 195 \n", "2 61499 Butte Manzanita Elementary KK-08 240 \n", "3 61549 Butte Thermalito Union Elementary KK-08 1550 \n", "4 61457 Butte Golden Feather Union Elementary KK-08 243 \n", "5 61523 Butte Palermo Union Elementary KK-08 1335 \n", ".. ... ... ... ... ... \n", "416 68957 San Mateo Las Lomitas Elementary KK-08 984 \n", "417 69518 Santa Clara Los Altos Elementary KK-08 3724 \n", "418 72611 Ventura Somis Union Elementary KK-08 441 \n", "419 72744 Yuba Plumas Elementary KK-08 101 \n", "420 72751 Yuba Wheatland Elementary KK-08 1778 \n", "\n", " teachers calwpct mealpct computer testscr compstu \\\n", "1 10.900000 0.510200 2.040800 67 690.799988 0.343590 \n", "2 11.150000 15.416700 47.916698 101 661.200012 0.420833 \n", "3 82.900002 55.032299 76.322601 169 643.599976 0.109032 \n", "4 14.000000 36.475399 77.049202 85 647.700012 0.349794 \n", "5 71.500000 33.108601 78.427002 171 640.849976 0.128090 \n", ".. ... ... ... ... ... ... \n", "416 59.730000 0.101600 3.556900 195 704.300049 0.198171 \n", "417 208.479996 1.074100 1.503800 721 706.750000 0.193609 \n", "418 20.150000 3.563500 37.193802 45 645.000000 0.102041 \n", "419 5.000000 11.881200 59.405899 14 672.200012 0.138614 \n", "420 93.400002 6.923500 47.571201 313 655.750000 0.176041 \n", "\n", " expnstu str avginc elpct readscr mathscr \n", "1 6384.911133 17.889910 22.690001 0.000000 691.599976 690.000000 \n", "2 5099.380859 21.524664 9.824000 4.583333 660.500000 661.900024 \n", "3 5501.954590 18.697226 8.978000 30.000002 636.299988 650.900024 \n", "4 7101.831055 17.357143 8.978000 0.000000 651.900024 643.500000 \n", "5 5235.987793 18.671329 9.080333 13.857677 641.799988 639.900024 \n", ".. ... ... ... ... ... ... \n", "416 7290.338867 16.474134 28.716999 5.995935 700.900024 707.700012 \n", "417 5741.462891 17.862625 41.734108 4.726101 704.000000 709.500000 \n", "418 4402.831543 21.885857 23.733000 24.263039 648.299988 641.700012 \n", "419 4776.336426 20.200001 9.952000 2.970297 667.900024 676.500000 \n", "420 5993.392578 19.036402 12.502000 5.005624 660.500000 651.000000 \n", "\n", "[420 rows x 17 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pydataset.data(\"Caschool\")\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data set relates average test scores in California schools with various data about the schools, such as the amount of students and teachers etc." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we start, we split the data into a training and a test set." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "np.random.seed(123)\n", "random_indices = np.random.choice([True, False], size=len(data), p=[0.75, 0.25])\n", "data_train = data.iloc[random_indices]\n", "data_test = data.iloc[~random_indices]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simple structure - only inputs and outputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The columns all represent different data about schools in california. We want to predict the average reading score 'readscr', average math score 'mathscr' and average score 'testscr'.\n", "We do not care for now about the details of the other columns and simply treat all other numerical columns as inputs." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "outputs = {'readscr', 'mathscr', 'testscr'}" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'avginc',\n", " 'calwpct',\n", " 'compstu',\n", " 'computer',\n", " 'elpct',\n", " 'enrltot',\n", " 'expnstu',\n", " 'mealpct',\n", " 'str',\n", " 'teachers'}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inputs = set(data.columns[4:]) - outputs\n", "inputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we define a causal structure." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "causal_structure_1 = CausalStructure([[inputs, outputs]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We provided the training data as scaling data. The CausalStructure will use these in order to apply the correct locations and scales when building the Graph. Alternatively, we could have standardized the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we simply train the causal_structure with the training data and test the predictive power on the test data." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "causal_structure_1.train(data_train, method=\"MGVI\")" ] }, { "cell_type": "code", "execution_count": 8, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
teacherscompstumealpctcalwpctstravgincreadscrenrltotmathscrtestscrcomputerexpnstuelpct
710.0000000.14359094.62370312.90320019.5000006.577000617.612475195.0625.262781621.37679028.05253.33105568.717949
2221.0000000.11157991.54640221.64950022.6190479.630000627.282873475.0631.942011629.66814553.04542.10498016.210526
3817.5000000.06338094.93240414.52700016.22857114.558000628.064876284.0631.237212629.62678418.06516.53320332.394367
39280.0000000.10465581.11730219.57169919.17857222.059999632.4540085370.0639.352250635.985587562.04559.17675865.512100
45221.0000000.07609292.74310324.65950019.26696810.050500622.6973854258.0630.101735626.458898324.05092.91748036.801315
4839.0000000.10442367.44470219.77890020.87179615.177000643.666348814.0643.284873643.51702185.04518.01611313.759213
5274.5000000.15125079.72550227.26140021.47651110.472000630.0087111600.0632.956701631.485806242.04720.08642635.250000
59126.1200030.05415052.39640015.45950022.25658012.997000642.4901682807.0644.200948643.344747152.04353.01953133.487709
6550.0000000.15569582.13169927.16820019.1399999.082000633.654592957.0634.547127634.078879149.05306.13281217.659353
67209.8399960.06543893.92269917.70260020.68242514.601625625.4728444340.0632.377607629.086134284.05181.57959031.198156
72141.2100070.09139668.39640021.25880121.15289113.730599641.8719662987.0641.980173642.028016273.04826.66601614.429193
8526.5000000.07594975.73840321.51899917.8867938.258000632.714856474.0633.982099633.32322936.05329.00244128.691982
8657.7000010.24865462.21279929.44680019.3067598.896000650.5788641114.0645.014199647.825519277.05929.8090821.795332
9215.0000000.18333372.18540248.34439820.00000011.553000647.135993300.0640.133688643.63113055.05869.3891600.666667
948.0000000.23287754.10960025.34250118.2500007.105000654.489627146.0647.243790650.94461534.06231.6015620.000000
107846.3800050.06092251.24210020.52370122.92351014.127667647.84587719402.0646.546757647.1655161182.04906.22998018.436245
109136.8300020.15146964.09770225.82980019.15515513.390000650.9501012621.0646.368921648.613525397.05718.5512702.022129
114332.1000060.07655771.02380412.27910019.62661714.242901634.9486006518.0639.780808637.422017499.05172.01953143.494938
12026.6100010.20253282.06749720.67510017.81285111.238000630.479794474.0634.182173632.48004996.04945.03173835.443039
12130.0000000.26654474.86239620.55050118.13333310.056000641.267530544.0641.698759641.549939145.05223.0253918.639706
125114.5000000.04166753.21060214.41400019.2838429.630000647.8329032208.0647.167778647.60970092.04960.5156259.873188
12655.0000000.13147444.25970111.32220022.81818215.274000653.8237081255.0651.019501652.490324165.04880.04052716.095617
12998.0000000.08664667.75180124.41510020.0204099.485000639.8215361962.0639.065021639.379896170.05204.68750018.195719
13439.5000000.00000034.07889911.71050019.03797514.076000662.788831752.0656.968347659.8496650.05500.1079100.132979
135537.8800050.18428439.0368007.48750017.34215725.487333658.6620779328.0663.079096661.0961201719.05360.51709050.857632
143391.4200130.15838971.91210212.39900021.50120012.669900633.0883798416.0639.744562636.4212651333.05065.91113343.750000
146232.9700010.13031265.91500117.47610119.79653912.827000642.9322204612.0643.894790643.420662601.05124.83642616.652212
1506.0000000.00000035.82090011.19400022.16666611.426000659.636291133.0654.006918656.9016190.05213.0893550.751880
15211.6600000.13513540.6250007.58930019.03945214.578000656.280216222.0653.613198655.00275030.04886.98388713.513513
15811.5000000.15447243.9024019.75610021.39130411.081000652.815764246.0649.519740651.19026338.05161.20214816.666668
16239.9000020.06877632.18709910.17880018.2205519.972000655.948312727.0653.918119654.96942650.04842.60791013.067400
16638.0000000.07528235.7591027.02630020.97368416.292999661.393048797.0658.033962659.67219960.04674.2988283.262233
16813.7000000.21702167.2340016.80850017.15328416.622999641.824404235.0642.706149642.30592051.05621.68798839.574467
169371.1000060.15613751.56740223.19750022.34977112.549883649.4621778294.0649.298686649.4308831295.04948.86816410.127803
1718.2500000.10666723.2258003.22580018.18181818.326000665.447342150.0661.930925663.70369916.05132.78857414.000000
173117.8000030.14832352.25230017.97510019.74533111.426000652.0221552326.0649.161762650.526578345.05149.1865236.405847
17430.5000000.32534954.76190220.63489916.4262298.830000652.584348501.0650.315801651.378747163.05373.2065432.395210
17528.2700000.10212889.69960031.33050016.62539711.176000636.501320470.0634.375519635.41695448.06485.1660165.957447
18441.1500020.09615450.76340116.53940018.95504214.197000655.280541780.0650.376220652.90347975.05261.3706053.846154
1866.7500000.17857145.7142987.85710020.74074010.639000652.446694140.0651.186929651.75655625.04566.27002010.714286
1895.0000000.23148132.1101003.66970021.6000009.665000659.411046108.0658.471727658.90514225.04432.4780274.629630
20415.8500000.11726428.6644995.53750019.36908514.578000662.314650307.0659.310833660.85310536.04718.1630867.491857
20517.5000000.16138353.60229918.44380019.82857110.202000649.437663347.0646.738300648.03849556.04751.2998059.798271
21161.9900020.14526162.26750234.18949918.21261411.291000651.5672961129.0644.711060648.104441164.05805.6367190.000000
214229.1999970.12540625.8885008.54200021.50087414.623000663.4655374928.0660.573657661.936855618.05139.9375005.925324
21943.5000000.11098312.5741003.08420019.88505714.578000669.613275865.0666.541670668.12180396.04797.5034183.352601
222329.1199950.09791336.88999912.67850019.36375814.597667658.6884476373.0658.211347658.471972624.04733.7465826.260787
224138.1199950.06613834.44710211.12640021.01795616.271999663.0856442903.0657.967585660.539652192.05431.1772463.169135
22529.6500000.10619536.6371996.72570019.05564913.630000657.091211565.0653.529834655.36500360.05382.08886716.991150
234188.1999970.11910249.4268999.77080018.69288122.473000653.0315233518.0652.258787652.659949419.05642.83203140.108017
235924.5700070.12444350.97079818.93190020.86807815.684654652.77376719294.0653.725935653.4935262401.05280.02343816.663212
2386.0000000.35897436.1344998.40340019.50000016.356001668.170509117.0662.806404665.45784642.06039.9858400.854701
243242.5000000.09106637.2911008.31890021.46391715.749917653.9844855205.0653.846936653.818800474.04954.46630922.939482
247153.1999970.10308026.9433003.53050020.77023512.900000660.4710343182.0659.690492659.956172328.04777.5126958.956632
249588.8400270.12711932.7654999.01580020.13280317.435200659.25106211855.0659.739467659.5535941507.05486.02978520.725431
25051.6699980.12078736.79779812.82770020.66963614.760000663.5538771068.0656.782451659.998883129.05486.3823240.187266
2567.0000000.19327733.5999984.00000017.00000018.326000660.448138119.0656.326883658.31147923.05990.79443428.571430
25827.6000000.10989054.76190213.91940019.78260810.098000646.835857546.0645.633578646.29400160.04777.76904313.736264
263115.3000030.12989215.6559002.88170020.16478721.110500667.1673682325.0666.148685666.576950302.04890.98681622.709679
28146.6500020.12773725.6054998.07380017.62057914.163000667.893071822.0661.581156664.708583105.05784.6250000.851582
28427.3500000.11262126.21360016.11650118.82998114.209000666.968963515.0659.846349663.47900758.05190.3100590.000000
28746.0000000.15431355.28550013.85180017.89130410.551000652.062665823.0648.806330650.402278127.05331.9208982.187120
288114.3000030.11564313.3692002.91610019.51881016.955999669.3675312231.0665.806105667.439416258.05599.60791013.626176
29015.5000000.27508132.6861004.20710019.93548416.271999665.115102309.0662.837178664.02708885.04700.4321291.941748
29247.9599990.11801247.30540120.95809920.14178511.834000656.883658966.0650.485988653.693831114.05318.2407230.621118
29435.5000000.07086630.37319910.81080021.46478812.431000663.358136762.0657.475610660.40395954.05143.1904300.000000
296489.2999880.11299530.6437003.33500020.13080020.875750661.4656289850.0663.110579662.1962701113.05081.45556618.558376
2975.0000000.07751950.3876009.30230025.79999910.639000648.618780129.0648.549217648.60304610.04016.4162606.201550
298565.5100100.10829628.3766002.53840018.77774025.029619666.03605510619.0667.101409666.7391721150.05374.05029318.457481
30633.7000010.12888931.8519000.00000020.02967321.957001663.041307675.0662.365592662.68238287.04543.30517614.962962
31610.8800000.23750053.50320113.37580014.70588211.826000657.115402160.0650.725460653.88070438.06870.3461912.500000
318108.7500000.13512316.0651004.04930020.89195417.332001671.4759502272.0667.167409669.243356307.05182.3657231.320423
323245.1799930.13752223.6420007.03700018.89224220.469999667.1939664632.0664.397837665.754992637.05666.71386717.854059
3285.5000000.08474651.6666988.33330021.4545468.934000648.312381118.0647.954079648.06815010.04451.2568367.627119
330232.7500000.12378519.3724992.60780020.33942018.827230666.8441894734.0666.145109666.526671586.04922.93994110.857626
332286.9200130.08918230.0851005.61340021.10344323.667376663.8953766055.0663.783643663.791609540.04829.71728514.236169
334139.3000030.21956423.0989005.03390020.10768120.546000671.5579432801.0668.080271669.752223615.05205.9418952.070689
33865.9000020.09571046.12210122.19470018.39150210.551000654.7038791212.0650.066687652.415548116.05090.5878913.960396
341288.6300050.14863415.5128002.16350021.67827221.095751669.6148106257.0669.478912669.555534930.04889.4799808.726227
34245.0000000.14055319.0091994.72350019.28888915.167000669.900481868.0665.261388667.561157122.05118.1303710.000000
34970.5000000.12603310.4142002.42600020.59574517.656000673.9923561452.0669.820784672.024306183.05028.5615230.000000
3508.0000000.20645212.2581000.64520019.37500017.709000674.467598155.0668.955346671.69386232.05695.4667974.516129
35230.0800000.18165829.0210004.89510018.84973318.593000668.890252567.0663.800812666.315450103.05156.4370120.000000
37125.5000000.11135948.48479812.72730017.60784312.934000658.155302449.0651.847919654.93789550.05884.4321290.000000
3755.1000000.1728400.0000003.61450015.88235322.528999687.41395381.0677.710248682.69013414.07667.5717770.000000
377108.9599990.1137763.7302001.94170017.98825324.603001681.1054571960.0677.414093679.339899223.05368.5029301.479592
37949.1699980.3276966.5353002.17840019.23937433.455002687.972117946.0685.793505686.758283310.05387.4589841.479915
38246.0000000.22857110.6515004.23990020.54347819.346500675.490470945.0671.170728673.307374216.05088.7080082.539683
38410.5100000.21341512.9412002.35290015.60418622.863335676.657773164.0670.484640673.55571735.06588.43066411.585366
3886.0000000.2014933.7313000.74630022.33333421.957001679.589037134.0675.039429677.46593227.05094.9589842.238806
39328.0200000.06273811.4068003.99240018.77230513.567000671.865756526.0666.245290669.09789333.05644.2861330.000000
4004.8500000.25925920.48189913.25300016.70103130.840000683.22578081.0673.540505678.45875521.07614.37939512.345679
403146.3000030.1589309.6774000.82610017.37525627.947750681.8552252542.0676.931333679.498758404.06604.06396510.385523
40565.1200030.2568461.4164000.84990016.26228555.327999705.6863341059.0708.851129707.182838272.06460.6572272.266289
41312.3300000.1000000.0000000.45450017.84266143.230000697.051592220.0693.210634695.00009622.06500.4497071.363636
42093.4000020.17604147.5712016.92350019.03640212.502000657.3268031778.0652.903342655.114523313.05993.3925785.005624
\n", "
" ], "text/plain": [ " teachers compstu mealpct calwpct str avginc \\\n", "7 10.000000 0.143590 94.623703 12.903200 19.500000 6.577000 \n", "22 21.000000 0.111579 91.546402 21.649500 22.619047 9.630000 \n", "38 17.500000 0.063380 94.932404 14.527000 16.228571 14.558000 \n", "39 280.000000 0.104655 81.117302 19.571699 19.178572 22.059999 \n", "45 221.000000 0.076092 92.743103 24.659500 19.266968 10.050500 \n", "48 39.000000 0.104423 67.444702 19.778900 20.871796 15.177000 \n", "52 74.500000 0.151250 79.725502 27.261400 21.476511 10.472000 \n", "59 126.120003 0.054150 52.396400 15.459500 22.256580 12.997000 \n", "65 50.000000 0.155695 82.131699 27.168200 19.139999 9.082000 \n", "67 209.839996 0.065438 93.922699 17.702600 20.682425 14.601625 \n", "72 141.210007 0.091396 68.396400 21.258801 21.152891 13.730599 \n", "85 26.500000 0.075949 75.738403 21.518999 17.886793 8.258000 \n", "86 57.700001 0.248654 62.212799 29.446800 19.306759 8.896000 \n", "92 15.000000 0.183333 72.185402 48.344398 20.000000 11.553000 \n", "94 8.000000 0.232877 54.109600 25.342501 18.250000 7.105000 \n", "107 846.380005 0.060922 51.242100 20.523701 22.923510 14.127667 \n", "109 136.830002 0.151469 64.097702 25.829800 19.155155 13.390000 \n", "114 332.100006 0.076557 71.023804 12.279100 19.626617 14.242901 \n", "120 26.610001 0.202532 82.067497 20.675100 17.812851 11.238000 \n", "121 30.000000 0.266544 74.862396 20.550501 18.133333 10.056000 \n", "125 114.500000 0.041667 53.210602 14.414000 19.283842 9.630000 \n", "126 55.000000 0.131474 44.259701 11.322200 22.818182 15.274000 \n", "129 98.000000 0.086646 67.751801 24.415100 20.020409 9.485000 \n", "134 39.500000 0.000000 34.078899 11.710500 19.037975 14.076000 \n", "135 537.880005 0.184284 39.036800 7.487500 17.342157 25.487333 \n", "143 391.420013 0.158389 71.912102 12.399000 21.501200 12.669900 \n", "146 232.970001 0.130312 65.915001 17.476101 19.796539 12.827000 \n", "150 6.000000 0.000000 35.820900 11.194000 22.166666 11.426000 \n", "152 11.660000 0.135135 40.625000 7.589300 19.039452 14.578000 \n", "158 11.500000 0.154472 43.902401 9.756100 21.391304 11.081000 \n", "162 39.900002 0.068776 32.187099 10.178800 18.220551 9.972000 \n", "166 38.000000 0.075282 35.759102 7.026300 20.973684 16.292999 \n", "168 13.700000 0.217021 67.234001 6.808500 17.153284 16.622999 \n", "169 371.100006 0.156137 51.567402 23.197500 22.349771 12.549883 \n", "171 8.250000 0.106667 23.225800 3.225800 18.181818 18.326000 \n", "173 117.800003 0.148323 52.252300 17.975100 19.745331 11.426000 \n", "174 30.500000 0.325349 54.761902 20.634899 16.426229 8.830000 \n", "175 28.270000 0.102128 89.699600 31.330500 16.625397 11.176000 \n", "184 41.150002 0.096154 50.763401 16.539400 18.955042 14.197000 \n", "186 6.750000 0.178571 45.714298 7.857100 20.740740 10.639000 \n", "189 5.000000 0.231481 32.110100 3.669700 21.600000 9.665000 \n", "204 15.850000 0.117264 28.664499 5.537500 19.369085 14.578000 \n", "205 17.500000 0.161383 53.602299 18.443800 19.828571 10.202000 \n", "211 61.990002 0.145261 62.267502 34.189499 18.212614 11.291000 \n", "214 229.199997 0.125406 25.888500 8.542000 21.500874 14.623000 \n", "219 43.500000 0.110983 12.574100 3.084200 19.885057 14.578000 \n", "222 329.119995 0.097913 36.889999 12.678500 19.363758 14.597667 \n", "224 138.119995 0.066138 34.447102 11.126400 21.017956 16.271999 \n", "225 29.650000 0.106195 36.637199 6.725700 19.055649 13.630000 \n", "234 188.199997 0.119102 49.426899 9.770800 18.692881 22.473000 \n", "235 924.570007 0.124443 50.970798 18.931900 20.868078 15.684654 \n", "238 6.000000 0.358974 36.134499 8.403400 19.500000 16.356001 \n", "243 242.500000 0.091066 37.291100 8.318900 21.463917 15.749917 \n", "247 153.199997 0.103080 26.943300 3.530500 20.770235 12.900000 \n", "249 588.840027 0.127119 32.765499 9.015800 20.132803 17.435200 \n", "250 51.669998 0.120787 36.797798 12.827700 20.669636 14.760000 \n", "256 7.000000 0.193277 33.599998 4.000000 17.000000 18.326000 \n", "258 27.600000 0.109890 54.761902 13.919400 19.782608 10.098000 \n", "263 115.300003 0.129892 15.655900 2.881700 20.164787 21.110500 \n", "281 46.650002 0.127737 25.605499 8.073800 17.620579 14.163000 \n", "284 27.350000 0.112621 26.213600 16.116501 18.829981 14.209000 \n", "287 46.000000 0.154313 55.285500 13.851800 17.891304 10.551000 \n", "288 114.300003 0.115643 13.369200 2.916100 19.518810 16.955999 \n", "290 15.500000 0.275081 32.686100 4.207100 19.935484 16.271999 \n", "292 47.959999 0.118012 47.305401 20.958099 20.141785 11.834000 \n", "294 35.500000 0.070866 30.373199 10.810800 21.464788 12.431000 \n", "296 489.299988 0.112995 30.643700 3.335000 20.130800 20.875750 \n", "297 5.000000 0.077519 50.387600 9.302300 25.799999 10.639000 \n", "298 565.510010 0.108296 28.376600 2.538400 18.777740 25.029619 \n", "306 33.700001 0.128889 31.851900 0.000000 20.029673 21.957001 \n", "316 10.880000 0.237500 53.503201 13.375800 14.705882 11.826000 \n", "318 108.750000 0.135123 16.065100 4.049300 20.891954 17.332001 \n", "323 245.179993 0.137522 23.642000 7.037000 18.892242 20.469999 \n", "328 5.500000 0.084746 51.666698 8.333300 21.454546 8.934000 \n", "330 232.750000 0.123785 19.372499 2.607800 20.339420 18.827230 \n", "332 286.920013 0.089182 30.085100 5.613400 21.103443 23.667376 \n", "334 139.300003 0.219564 23.098900 5.033900 20.107681 20.546000 \n", "338 65.900002 0.095710 46.122101 22.194700 18.391502 10.551000 \n", "341 288.630005 0.148634 15.512800 2.163500 21.678272 21.095751 \n", "342 45.000000 0.140553 19.009199 4.723500 19.288889 15.167000 \n", "349 70.500000 0.126033 10.414200 2.426000 20.595745 17.656000 \n", "350 8.000000 0.206452 12.258100 0.645200 19.375000 17.709000 \n", "352 30.080000 0.181658 29.021000 4.895100 18.849733 18.593000 \n", "371 25.500000 0.111359 48.484798 12.727300 17.607843 12.934000 \n", "375 5.100000 0.172840 0.000000 3.614500 15.882353 22.528999 \n", "377 108.959999 0.113776 3.730200 1.941700 17.988253 24.603001 \n", "379 49.169998 0.327696 6.535300 2.178400 19.239374 33.455002 \n", "382 46.000000 0.228571 10.651500 4.239900 20.543478 19.346500 \n", "384 10.510000 0.213415 12.941200 2.352900 15.604186 22.863335 \n", "388 6.000000 0.201493 3.731300 0.746300 22.333334 21.957001 \n", "393 28.020000 0.062738 11.406800 3.992400 18.772305 13.567000 \n", "400 4.850000 0.259259 20.481899 13.253000 16.701031 30.840000 \n", "403 146.300003 0.158930 9.677400 0.826100 17.375256 27.947750 \n", "405 65.120003 0.256846 1.416400 0.849900 16.262285 55.327999 \n", "413 12.330000 0.100000 0.000000 0.454500 17.842661 43.230000 \n", "420 93.400002 0.176041 47.571201 6.923500 19.036402 12.502000 \n", "\n", " readscr enrltot mathscr testscr computer expnstu \\\n", "7 617.612475 195.0 625.262781 621.376790 28.0 5253.331055 \n", "22 627.282873 475.0 631.942011 629.668145 53.0 4542.104980 \n", "38 628.064876 284.0 631.237212 629.626784 18.0 6516.533203 \n", "39 632.454008 5370.0 639.352250 635.985587 562.0 4559.176758 \n", "45 622.697385 4258.0 630.101735 626.458898 324.0 5092.917480 \n", "48 643.666348 814.0 643.284873 643.517021 85.0 4518.016113 \n", "52 630.008711 1600.0 632.956701 631.485806 242.0 4720.086426 \n", "59 642.490168 2807.0 644.200948 643.344747 152.0 4353.019531 \n", "65 633.654592 957.0 634.547127 634.078879 149.0 5306.132812 \n", "67 625.472844 4340.0 632.377607 629.086134 284.0 5181.579590 \n", "72 641.871966 2987.0 641.980173 642.028016 273.0 4826.666016 \n", "85 632.714856 474.0 633.982099 633.323229 36.0 5329.002441 \n", "86 650.578864 1114.0 645.014199 647.825519 277.0 5929.809082 \n", "92 647.135993 300.0 640.133688 643.631130 55.0 5869.389160 \n", "94 654.489627 146.0 647.243790 650.944615 34.0 6231.601562 \n", "107 647.845877 19402.0 646.546757 647.165516 1182.0 4906.229980 \n", "109 650.950101 2621.0 646.368921 648.613525 397.0 5718.551270 \n", "114 634.948600 6518.0 639.780808 637.422017 499.0 5172.019531 \n", "120 630.479794 474.0 634.182173 632.480049 96.0 4945.031738 \n", "121 641.267530 544.0 641.698759 641.549939 145.0 5223.025391 \n", "125 647.832903 2208.0 647.167778 647.609700 92.0 4960.515625 \n", "126 653.823708 1255.0 651.019501 652.490324 165.0 4880.040527 \n", "129 639.821536 1962.0 639.065021 639.379896 170.0 5204.687500 \n", "134 662.788831 752.0 656.968347 659.849665 0.0 5500.107910 \n", "135 658.662077 9328.0 663.079096 661.096120 1719.0 5360.517090 \n", "143 633.088379 8416.0 639.744562 636.421265 1333.0 5065.911133 \n", "146 642.932220 4612.0 643.894790 643.420662 601.0 5124.836426 \n", "150 659.636291 133.0 654.006918 656.901619 0.0 5213.089355 \n", "152 656.280216 222.0 653.613198 655.002750 30.0 4886.983887 \n", "158 652.815764 246.0 649.519740 651.190263 38.0 5161.202148 \n", "162 655.948312 727.0 653.918119 654.969426 50.0 4842.607910 \n", "166 661.393048 797.0 658.033962 659.672199 60.0 4674.298828 \n", "168 641.824404 235.0 642.706149 642.305920 51.0 5621.687988 \n", "169 649.462177 8294.0 649.298686 649.430883 1295.0 4948.868164 \n", "171 665.447342 150.0 661.930925 663.703699 16.0 5132.788574 \n", "173 652.022155 2326.0 649.161762 650.526578 345.0 5149.186523 \n", "174 652.584348 501.0 650.315801 651.378747 163.0 5373.206543 \n", "175 636.501320 470.0 634.375519 635.416954 48.0 6485.166016 \n", "184 655.280541 780.0 650.376220 652.903479 75.0 5261.370605 \n", "186 652.446694 140.0 651.186929 651.756556 25.0 4566.270020 \n", "189 659.411046 108.0 658.471727 658.905142 25.0 4432.478027 \n", "204 662.314650 307.0 659.310833 660.853105 36.0 4718.163086 \n", "205 649.437663 347.0 646.738300 648.038495 56.0 4751.299805 \n", "211 651.567296 1129.0 644.711060 648.104441 164.0 5805.636719 \n", "214 663.465537 4928.0 660.573657 661.936855 618.0 5139.937500 \n", "219 669.613275 865.0 666.541670 668.121803 96.0 4797.503418 \n", "222 658.688447 6373.0 658.211347 658.471972 624.0 4733.746582 \n", "224 663.085644 2903.0 657.967585 660.539652 192.0 5431.177246 \n", "225 657.091211 565.0 653.529834 655.365003 60.0 5382.088867 \n", "234 653.031523 3518.0 652.258787 652.659949 419.0 5642.832031 \n", "235 652.773767 19294.0 653.725935 653.493526 2401.0 5280.023438 \n", "238 668.170509 117.0 662.806404 665.457846 42.0 6039.985840 \n", "243 653.984485 5205.0 653.846936 653.818800 474.0 4954.466309 \n", "247 660.471034 3182.0 659.690492 659.956172 328.0 4777.512695 \n", "249 659.251062 11855.0 659.739467 659.553594 1507.0 5486.029785 \n", "250 663.553877 1068.0 656.782451 659.998883 129.0 5486.382324 \n", "256 660.448138 119.0 656.326883 658.311479 23.0 5990.794434 \n", "258 646.835857 546.0 645.633578 646.294001 60.0 4777.769043 \n", "263 667.167368 2325.0 666.148685 666.576950 302.0 4890.986816 \n", "281 667.893071 822.0 661.581156 664.708583 105.0 5784.625000 \n", "284 666.968963 515.0 659.846349 663.479007 58.0 5190.310059 \n", "287 652.062665 823.0 648.806330 650.402278 127.0 5331.920898 \n", "288 669.367531 2231.0 665.806105 667.439416 258.0 5599.607910 \n", "290 665.115102 309.0 662.837178 664.027088 85.0 4700.432129 \n", "292 656.883658 966.0 650.485988 653.693831 114.0 5318.240723 \n", "294 663.358136 762.0 657.475610 660.403959 54.0 5143.190430 \n", "296 661.465628 9850.0 663.110579 662.196270 1113.0 5081.455566 \n", "297 648.618780 129.0 648.549217 648.603046 10.0 4016.416260 \n", "298 666.036055 10619.0 667.101409 666.739172 1150.0 5374.050293 \n", "306 663.041307 675.0 662.365592 662.682382 87.0 4543.305176 \n", "316 657.115402 160.0 650.725460 653.880704 38.0 6870.346191 \n", "318 671.475950 2272.0 667.167409 669.243356 307.0 5182.365723 \n", "323 667.193966 4632.0 664.397837 665.754992 637.0 5666.713867 \n", "328 648.312381 118.0 647.954079 648.068150 10.0 4451.256836 \n", "330 666.844189 4734.0 666.145109 666.526671 586.0 4922.939941 \n", "332 663.895376 6055.0 663.783643 663.791609 540.0 4829.717285 \n", "334 671.557943 2801.0 668.080271 669.752223 615.0 5205.941895 \n", "338 654.703879 1212.0 650.066687 652.415548 116.0 5090.587891 \n", "341 669.614810 6257.0 669.478912 669.555534 930.0 4889.479980 \n", "342 669.900481 868.0 665.261388 667.561157 122.0 5118.130371 \n", "349 673.992356 1452.0 669.820784 672.024306 183.0 5028.561523 \n", "350 674.467598 155.0 668.955346 671.693862 32.0 5695.466797 \n", "352 668.890252 567.0 663.800812 666.315450 103.0 5156.437012 \n", "371 658.155302 449.0 651.847919 654.937895 50.0 5884.432129 \n", "375 687.413953 81.0 677.710248 682.690134 14.0 7667.571777 \n", "377 681.105457 1960.0 677.414093 679.339899 223.0 5368.502930 \n", "379 687.972117 946.0 685.793505 686.758283 310.0 5387.458984 \n", "382 675.490470 945.0 671.170728 673.307374 216.0 5088.708008 \n", "384 676.657773 164.0 670.484640 673.555717 35.0 6588.430664 \n", "388 679.589037 134.0 675.039429 677.465932 27.0 5094.958984 \n", "393 671.865756 526.0 666.245290 669.097893 33.0 5644.286133 \n", "400 683.225780 81.0 673.540505 678.458755 21.0 7614.379395 \n", "403 681.855225 2542.0 676.931333 679.498758 404.0 6604.063965 \n", "405 705.686334 1059.0 708.851129 707.182838 272.0 6460.657227 \n", "413 697.051592 220.0 693.210634 695.000096 22.0 6500.449707 \n", "420 657.326803 1778.0 652.903342 655.114523 313.0 5993.392578 \n", "\n", " elpct \n", "7 68.717949 \n", "22 16.210526 \n", "38 32.394367 \n", "39 65.512100 \n", "45 36.801315 \n", "48 13.759213 \n", "52 35.250000 \n", "59 33.487709 \n", "65 17.659353 \n", "67 31.198156 \n", "72 14.429193 \n", "85 28.691982 \n", "86 1.795332 \n", "92 0.666667 \n", "94 0.000000 \n", "107 18.436245 \n", "109 2.022129 \n", "114 43.494938 \n", "120 35.443039 \n", "121 8.639706 \n", "125 9.873188 \n", "126 16.095617 \n", "129 18.195719 \n", "134 0.132979 \n", "135 50.857632 \n", "143 43.750000 \n", "146 16.652212 \n", "150 0.751880 \n", "152 13.513513 \n", "158 16.666668 \n", "162 13.067400 \n", "166 3.262233 \n", "168 39.574467 \n", "169 10.127803 \n", "171 14.000000 \n", "173 6.405847 \n", "174 2.395210 \n", "175 5.957447 \n", "184 3.846154 \n", "186 10.714286 \n", "189 4.629630 \n", "204 7.491857 \n", "205 9.798271 \n", "211 0.000000 \n", "214 5.925324 \n", "219 3.352601 \n", "222 6.260787 \n", "224 3.169135 \n", "225 16.991150 \n", "234 40.108017 \n", "235 16.663212 \n", "238 0.854701 \n", "243 22.939482 \n", "247 8.956632 \n", "249 20.725431 \n", "250 0.187266 \n", "256 28.571430 \n", "258 13.736264 \n", "263 22.709679 \n", "281 0.851582 \n", "284 0.000000 \n", "287 2.187120 \n", "288 13.626176 \n", "290 1.941748 \n", "292 0.621118 \n", "294 0.000000 \n", "296 18.558376 \n", "297 6.201550 \n", "298 18.457481 \n", "306 14.962962 \n", "316 2.500000 \n", "318 1.320423 \n", "323 17.854059 \n", "328 7.627119 \n", "330 10.857626 \n", "332 14.236169 \n", "334 2.070689 \n", "338 3.960396 \n", "341 8.726227 \n", "342 0.000000 \n", "349 0.000000 \n", "350 4.516129 \n", "352 0.000000 \n", "371 0.000000 \n", "375 0.000000 \n", "377 1.479592 \n", "379 1.479915 \n", "382 2.539683 \n", "384 11.585366 \n", "388 2.238806 \n", "393 0.000000 \n", "400 12.345679 \n", "403 10.385523 \n", "405 2.266289 \n", "413 1.363636 \n", "420 5.005624 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_data_inputs = data_test[inputs]\n", "test_data_predictions_1 = causal_structure_1.predict(test_data_inputs)\n", "test_data_predictions_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the `predict` method completes the provided data frame filling in the missing columns with estimates.\n", "Let us check the predictions by looking at a scatter plot if the true test data values vs. the predictions." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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No099tgj3iGJiITs999/p2vXrmzfvp3p06fvHCkQkcSnhC1EzjkyMjJ4//33adSokbaaEpGk06pVK0455RSuvPJK9t9//3iHIyKVoDlsFXDOMXr0aIYNG4ZzjrZt2ypZE5Gk8sorr7By5Upq1KjBE088oWRNJAkpYStHcXEx//d//8fNN9/Mtm3bKCpK6CojIiIlOOe45ZZbOPfcc3nggQfiHY6IVIGGRIMoKCjgoosu4uWXX+aqq67iwQcf1ObHIpI0duzYwSWXXMJLL73ERRddxH333RfvkESkCpSBBPGPf/yDl19+mbvuuouHHnpIyZqIJI1NmzbRr18/XnrpJe68806efvppMjIy4h2WiFSBetiCOP/88+nevbu2mhKRpFNUVMTatWt54YUXOO+88+IdjohEgBI2P2vWrOGTTz5h8ODB9O7dO97hiIhUyuLFi9lrr71o2LAhc+bMoUYNNfEiqULjfF5Llizh6KOP5uKLL2bt2rXxDkdEpFJmzpzJEUccwbXXXgugZE0kxShhw7MvaLdu3fjrr7/44IMPaNKkSbxDEhEJ2auvvkqfPn1o2bIlI0eOjHc4IhIF1T5h8+0LamZ89tlndOnSJd4hiYiExDnHvffeyznnnMPRRx/N559/TsuWLeMdlohEQbVP2L788kt23313vvjiCw444IB4hyMiErLVq1czduxYzj77bN5//30V9RZJYdV2ksOGDRto2LAh1157LcOGDaNevXrxDklEJCTbtm2jVq1aNGvWjG+++YY2bdqo9JBIiquWv+FPPPEEe++9Nz/++COAkjURSRpr1qzhmGOO4d577wVg7733VrImUg1Uq99y5xx33303w4cPp1u3brRu3TreIYmIhGzx4sUcddRRLFq0iAMPPDDe4YhIDFWbIVHfvqDjxo3j3HPP5dlnn1XlbxFJGl9++SX9+/cnPT2djz/+mCOOOCLeIYlIDFWbHrannnqKcePGcfXVV/PCCy8oWRORpLFu3Tp69+7N7rvvzqxZs5SsiVRD1aaH7cILL6R+/foMHToUM4t3OCIiIWvcuDEvv/wyRx99NI0bN453OCISB9UmYatZsyZnnXVWvMMQEQnLoEGD4h2CiMRRtRkSFREREUlWSthEREREEpwSNhEREZEEp4RNREREJMEpYRMRERFJcErYREQCMLMsM3vHzH4ysx/N7Cgz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AEwFLitvhahIdTR37lzOOussunbtysI5s3nggh5lSnx89NPasOaYhdpzVl5pERERiY6olvWINpX1kOrolVde4fTTT6d27doBX28zckrZyZ94JokuGdMv6H1Lr/4ET89ZoiVjKushItWRdjoQSXDbtm3jwgsvZP78+QCcc845QZM1CH+OmXrOREQSV9TqsIlI1W3YsIFBgwbx6aefcuSRR9KxY8cKrxnRu33AnrJQ5pgN6pStBE1EJAEpYRNJUMuXL6dPnz788ssvvP766wwZMiSk63wJV7x2IhARkchTwiaSgJYsWcIxxxzD5s2bmTZtGscff3ylrldPmYhIatEcNpEE1KJFC0444QQ+//zzSidrIiKSetTDJpJAcnJy6Nq1K02bNuWFF16o/PVx3JRdRESiRwmbSIJ48MEHufbaa7n88st59NFHQ77Ol6Tl5uVj7NrPTZuyi4ikDg2JisRZcXEx11xzDddeey2nn346Y8eODfla//0/oezmu9qUXUQkNShhE4mjbdu2MXToUB5++GGuuuoq3nzzzXJrrJUWaP/P0rQpu4hI8tOQqEiM3ZzzHa9/tZwi5yB/E5s/+4oHHniA//u//8PMKnWvUJIxbcouIpL81MMmEkM353zHK7P/YPvmv3BFBZBZn7pDH2TD3r0qnaxBxcmYNmUXEUkNSthEYuj1r5azY+1SVr94Des/fBqAtIxavP7V8rDuN6J3ezIz0ksc86V92lpKRCR1aEhUJIa2LFvAn+NHk5ZRi3od++48XuQCbddeMe1qICJSPShhE4mRN998kzVv3UpGVjOaDr6DGvWb7nwtPYzhUB/taiAikvqUsIlEQekCtv/q0pR/XTyMzObt2f2Um0nPrFfi/KFHtoxTpCIikgzMhTkUkwg6d+7s5syZE+8wpJornZwdv18T3p2bS35BEc45zIyMNGP7mt+whi2wGjV3XptmcNaRrbh70EExjTGZh03NbK5zrnO84xARiSX1sIlUga9wra8WWm5ePq/O/gMHuMIC1k15kFrN96P+4QNJa9K2zPXNGmTGJFkrHaN2QBARSS5aJSopI2deLt3GzKTNyCl0GzOTnHm5UX/PQIVrHVC87W/WvH0rW3/6DFdcGPT6WBS1DRSjdkAQEUku6mGTlBCvXqRACVfhpnX8+fZtFKzPpXH/66jb4big18eiqG2wpFA7IIiI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vLKsLvlFoS8gUN00ERGR5KOELYkUFhYyfPhwnn76ac4//3xe27x/WBuvq26aiIhIctEctiSxZcsWTjnlFJ5++mluvPFGnnvuOVZt3BbwXC0gEBERSS3qYUsCBQUFnHDCCXz11Vf85z//Yfjw4YBnoUBugORMCwhERERSi3rYkkBGRgZDhgzh3Xff3ZmsQfjlQURERCS5qIctgc2ZM4fNmzdz/PHHc9VVV5V5XQsIREREqgclbAlq6tSpnH766ey9997MmzePtLTAnaFaQCAiIpL6NCSagF544QVOPvlk2rVrx9SpU4MmayIiIlI9KBNIIM45Ro8ezQUXXMDxxx/PJ598QrNmzeIdloiIiMSZErYE89NPP3HOOecwZcoU6tevH+9wREREJAFoDlsC2Lp1K3/99RctW7bkueeeo0aNGphZvMMSERGRBFEtEracebkJu5Jy3bp19O/fnw0bNrBw4UJq1qwZ75BEREQkwaR8wlZ6s/NQ9tuMld9//50+ffqwfPlyXnvtNSVrIiIiElDKz2EbO21x0P0242nu3LkcddRRrFu3jhkzZnDKKafENR4RERFJXFFN2Mwsy8zeMbOfzOxHMzvKzMZ6f15oZhPMLMvv/FFm9quZLTaz3pGIIdi+mvHcb9M5x/XXX09mZiZffPEF3bp1i1ssIiIikvii3cM2DpjqnNsPOAT4EZgOHOicOxj4GRgFYGYdgCHAAUAf4HEzSw9410oItq9mvPbbLCoqwsx4/fXX+fLLL9l///3jEoeIiIgkj6glbGZWH+gOPAvgnNvhnMtzzn3gnCv0njYbaOH9fiDwhnNuu3NuCfArcERV40iU/Tadc9xzzz2cfPLJFBQU0LRpU5o3bx7TGERERCQ5RbOHrS2wFnjezOaZ2TNmVrfUORcC73u/zwaW+722wnusBDMbZmZzzGzO2rVrKwxiUKds7j31ILKzMjEgOyuTe089KKYLDoqKihg+fDg33XQTu+++O865mL23iIiIJL9orhKtARwKXOGc+8rMxgEjgVsAzOwmoBB41Xt+oMJjZTIb59xTwFMAnTt3Dinzied+m1u3buWss85i4sSJXH/99dx7773aakpEREQqJZqZwwpghXPuK+/P7+BJ4DCz84CTgbPdru6mFUBLv+tbACujGF9MnHPOObz33ns88sgj3HfffUrWREREpNKilj0451YDy83MN1msJ/CDmfUBbgAGOOe2+l3yHjDEzGqZWRugHfB1tOKLlVtuuYW3336bK664It6hiIiISJKKduHcK4BXzawm8DtwAfANUAuY7t1+abZz7l/OuUVm9hbwA56h0succ0VB7pvQvv32W95//31uuukmOnXqRKdOneIdkoiIiCQxS+YJ8J07d3Zz5syJdxglfPDBB5x22mk0atSIefPm0ahRo3iHJJJSzGyuc65zvOMQEYklTaiKoJdeeol+/frRtm1bZs2apWRNREREIkIJW4Q88MADnHfeeXTv3p1PP/1UNdZEREQkYpSwRUirVq04++yzef/992nQoEG8wxEREZEUooStCvLz8/noo48AGDx4MK+88go1a9aMc1QiIiKSapSwhemvv/7ihBNOoG/fvuTm5sY7HBEREUlh0S7rkZKWLl1Knz59WLp0Ka+++irZ2fHZRUFERESqByVslTR//nz69u3Ltm3bmD59Osccc0y8QxIREZEUp4StkiZOnEhGRgYffvghHTp0iHc4IiIiUg2ocG6I8vLyyMrKwjnH+vXr2X333WPyviJSkgrnikh1pEUHFXDOcd9999G+fXuWLVuGmSlZExERkZhSwlaOoqIirrzySkaOHEnPnj1p1qxZvEMSERGRakgJWxD5+fmcccYZPPbYY1x33XWqsSYiIiJxo0UHQdx9993k5OTw8MMPc9VVV8U7HBEREanGlLAFceONN3LMMcfQp0+feIciIiIi1ZyGRP3Mnz+fk08+mc2bN1O3bl0layIiIpIQlLB5zZgxg+7du7NgwQJWr14d73BEREREdlLCBrzyyiv07duX1q1bM2vWLNq1axfvkERERER2qvYJ23PPPce5557LMcccw2effUaLFi3iHZKIiIhICdU+YTvhhBO4/PLLef/992nQoEG8wxEREREpo1ombNu2beORRx6huLiYVq1a8eijj1KrVq14hyUiIiISULVL2NavX0+vXr246qqr+Oyzz+IdjoiIiEiFqlUdtj/++IM+ffrw22+/8cYbb3DsscfGOyQRERGRClWbhG3BggWcdNJJbNmyhWnTpnHcccfFOyQRERGRkFSbhG3jxo1kZmYybdo0DjzwwHiHIyIiIhKyapOwde/enR9//JGMjIx4hyIiIiJSKdVq0YGSNREREUlG1SphExEREUlGSthEREREEpwSNhER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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pl.figure(figsize=(10,10))\n", "for i, col in [(1, \"mathscr\"), (2, \"readscr\"), (3, \"testscr\")]:\n", " ax = pl.subplot(2,2,i)\n", " ax.scatter(data_test[col], test_data_predictions_1[col])\n", " minval, maxval = data_test[col].min(), data_test[col].max()\n", " ax.plot([minval, maxval], [minval, maxval], ls=\"--\", c=\"k\")\n", " ax.set_xlabel(\"real value\")\n", " ax.set_ylabel(\"prediction\")\n", " ax.set_title(col)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that the predictions seem to follow the real test values rather ok." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apart from making predictions we can also look at objectives. For example we can evaluate the performance using the `Evaluator`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'teachers': None,\n", " 'compstu': None,\n", " 'mealpct': None,\n", " 'calwpct': None,\n", " 'str': None,\n", " 'avginc': None,\n", " 'readscr': 0.8020755684153762,\n", " 'enrltot': None,\n", " 'mathscr': 0.6574450121854509,\n", " 'testscr': 0.7577271442716229,\n", " 'computer': None,\n", " 'expnstu': None,\n", " 'elpct': None}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "performance_1 = causal_structure_1.evaluate_objective(Evaluator, data=data_test,\n", " inputs=inputs, outputs=outputs,\n", " metric=\"r2\")\n", "performance_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that the R2-score for the inputs columns is returned as `None`. The values for the outputs match with the visual impression of a decent fit." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To judge whether this makes sense we have to know what these columns mean." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caschool\n", "\n", "PyDataset Documentation (adopted from R Documentation. The displayed examples are in R)\n", "\n", "## The California Test Score Data Set\n", "\n", "### Description\n", "\n", "a cross-section from 1998-1999\n", "\n", "_number of observations_ : 420\n", "\n", "_observation_ : schools\n", "\n", "_country_ : United States\n", "\n", "### Usage\n", "\n", " data(Caschool)\n", "\n", "### Format\n", "\n", "A dataframe containing :\n", "\n", "distcod\n", "\n", "disctric code\n", "\n", "county\n", "\n", "county\n", "\n", "district\n", "\n", "district\n", "\n", "grspan\n", "\n", "grade span of district\n", "\n", "enrltot\n", "\n", "total enrollment\n", "\n", "teachers\n", "\n", "number of teachers\n", "\n", "calwpct\n", "\n", "percent qualifying for CalWorks\n", "\n", "mealpct\n", "\n", "percent qualifying for reduced-price lunch\n", "\n", "computer\n", "\n", "number of computers\n", "\n", "testscr\n", "\n", "average test score (read.scr+math.scr)/2\n", "\n", "compstu\n", "\n", "computer per student\n", "\n", "expnstu\n", "\n", "expenditure per student\n", "\n", "str\n", "\n", "student teacher ratio\n", "\n", "avginc\n", "\n", "district average income\n", "\n", "elpct\n", "\n", "percent of English learners\n", "\n", "readscr\n", "\n", "average reading score\n", "\n", "mathscr\n", "\n", "average math score\n", "\n", "### Source\n", "\n", "California Department of Education http://www.cde.ca.gov.\n", "\n", "### References\n", "\n", "Stock, James H. and Mark W. Watson (2003) _Introduction to Econometrics_,\n", "Addison-Wesley Educational Publishers,\n", "http://wps.aw.com/aw_stockwatsn_economtrcs_1, chapter 4–7.\n", "\n", "### See Also\n", "\n", "`Index.Source`, `Index.Economics`, `Index.Econometrics`, `Index.Observations`\n", "\n", "\n" ] } ], "source": [ "pydataset.data(\"Caschool\", show_doc=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that in the fully connected model (all inputs influence all outputs) the biggest influences seem to be the total enrollment 'enrltot', the amount of teachers 'teachers' adn the percentage of students that get subsidized meals 'mealpct'. The influence of the other tests on 'testscr' is zero.\n", "\n", "We might now ask the question whether it makes sense that these quantities are the direct main influences or if they are only confounders. If we take a look at the correlations of the inputs, we see that the inputs have significant correlations that can lead to confounding and the explain-away-effect." ] }, { "cell_type": "code", "execution_count": 12, "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", "
teachers compstu calwpct mealpct str avginc enrltot computer expnstu elpct
teachers1.000000-0.2055730.1054570.1428550.2726160.0235910.9974240.936511-0.0821120.357818
compstu-0.2055731.000000-0.171575-0.217232-0.3019370.183565-0.213354-0.0417370.274414-0.272306
calwpct0.105457-0.1715751.0000000.7355910.017576-0.5115190.0998400.0721800.0813460.350795
mealpct0.142855-0.2172320.7355911.0000000.155836-0.7080450.1477870.076777-0.0314350.679559
str0.272616-0.3019370.0175760.1558361.000000-0.2229320.3058780.243671-0.5904350.226483
avginc0.0235910.183565-0.511519-0.708045-0.2229321.0000000.0109200.0762740.298755-0.362238
enrltot0.997424-0.2133540.0998400.1477870.3058780.0109201.0000000.929746-0.1002890.365512
computer0.936511-0.0417370.0721800.0767770.2436710.0762740.9297461.000000-0.0614140.292201
expnstu-0.0821120.2744140.081346-0.031435-0.5904350.298755-0.100289-0.0614141.000000-0.049224
elpct0.357818-0.2723060.3507950.6795590.226483-0.3622380.3655120.292201-0.0492241.000000
" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_train[inputs].corr().style.background_gradient(cmap='coolwarm', vmin=-1, vmax=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see for example that the total enrollment 'enrltot' and the amount of teachers 'teachers' are very strongly correlated (also with the amount of computers)." ] }, { "cell_type": "code", "execution_count": 13, "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", "
teachers compstu calwpct mealpct str avginc enrltot computer expnstu elpct
testscr-0.1577940.278550-0.628098-0.877528-0.2271900.734062-0.167217-0.0845730.150482-0.662471
readscr-0.1899920.285396-0.615917-0.887392-0.2520070.720649-0.199871-0.1177870.178198-0.704534
mathscr-0.1167870.260359-0.617021-0.832906-0.1915030.720223-0.125351-0.0452950.114616-0.591257
" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_train.corr().loc[inputs, outputs].T.style.background_gradient(cmap='coolwarm', vmin=-1, vmax=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Advanced structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the information we have about the data set we can now try to make a more realistic model of the involved columns.\n", "\n", "We start with a number of assumptions which result in dependencies." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "dependencies = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First of all we see in the data documentation that 'testscr' is just the average test score." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [[\"mathscr\", \"readscr\"], \"testscr\"]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 1: We believe the student-teacher-ratio is what actually matters for the test performance. The student teacher ratio of course depends on the number of students and the number of teachers." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [\"str\", [\"mathscr\", \"readscr\"]],\n", " [[\"teachers\", \"enrltot\"], \"str\"]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 2: We believe the amount of teachers depends on the number of students and the expenses per student." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [[\"expnstu\", \"enrltot\"], \"teachers\"]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 3: The amount of computers per student might indicate the learning possibilities at the school and therefore influence the test results. The amount of computer per student of course is determined by the number of students and the number of computers." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [\"compstu\", [\"mathscr\", \"readscr\"]],\n", " [[\"computer\", \"enrltot\"], \"compstu\"]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 4: The amount of computers probably depends on the amount of students and the funding per student." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [[\"expnstu\", \"enrltot\"], \"computer\"]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 5: We assume poorer students achieve worse test results on average. In the data we have the percent qualifying for reduced-price lunch 'mealpct', the percent qualifying for CalWorks 'calwpct' and the average income in the school district 'avginc'. Since the latter is a bit indirect we assume 'mealpct' and 'calwpct' are direct influences on the test results while both of them are influenced by 'avginc'." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [[\"mealpct\", \"calwpct\"], [\"mathscr\", \"readscr\"]],\n", " [\"avginc\", [\"mealpct\", \"calwpct\"]]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumption 6: We assume that being a non-native speaker influences the test results directly as well as the economic situation of the student. The percent of English learners is 'elpct'." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "dependencies += [\n", " [\"elpct\", [\"mathscr\", \"readscr\"]],\n", " [\"elpct\", [\"mealpct\", \"calwpct\"]]\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we put in these assumptions into a causal structure." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "causal_structure_2 = CausalStructure(dependencies)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and train it" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "causal_structure_2.train(data_train, method=\"MGVI\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us have a look at the performance on the test data." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "test_data_inputs = data_test[inputs]\n", "test_data_predictions_2 = causal_structure_2.predict(test_data_inputs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First visually..." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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228xs0olayIiNZUSNhGJuUmTJnH++edz8MEHs++++yY6HBGRlKOETURi6rnnnuOSSy6hR48e/Pvf/6Zhw4aJDklEJOUoYRORmHnrrbe44oor6NOnD7NmzdIwqIhIJSlhE5GYOeWUU7jrrruYMWMGmZmZiQ5HRCRlKWETkaj717/+xY4dO6hXrx533303derUSXRIIiIpTQmbiETVvffey0UXXcRjjz2W6FBERKqNmFY6EJGawznHnXfeyX333ceFF17ImDFjEh2SiEi1oYRNRKrMOcfo0aN58MEHufzyy3n66adJS1MHvohItKhFFZEq+/XXX3n11Ve5+uqrlayJiMSAethEpNKKi4sBaNq0KUuXLqV58+aYWYKjEhGpfvQYLCKVUlRUxPDhwxkxYgTOOfbZZx8layIiMaKETUQqrLCwkEsuuYSJEyfSrFmzRIcjIlLtaUhURCqkoKCACy+8kNdee417772X22+/PdEhiYhUe0rYRKRCLr74Yl577TUefPBBRo0alehwRERqBCVsIlIh5513HscddxzXXnttokMREakxlLCJSFh5eXl88MEH9OnTh/79+yc6HBGRGkeLDkQkpJ07dzJgwAAGDBjADz/8kOhwRERqJPWwiUhQv/32G/3792fx4sW8+OKLtGnTJtEhiYjUSErYRCSg7du3069fP5YsWcKrr77K0KFDEx2SiEiNpYRNRAJ6/fXXWbp0Ka+//jqDBw9OdDgiIjWaEjYRKcU5h5lx+eWXc9JJJ9G+fftEhyQiUuNp0YGIlNi0aRM9evTgiy++wMyUrImIJAn1sIkIAD/99BM9e/Zk3bp1bNmyJdHhiIiIHyVsIsKGDRvo2bMnP/30E3PmzKFbt26Vus6M5TlMmLuajbl57J+Vyag+7RjUOTvK0YqI1DxK2ERSTLSTopycHLp168avv/7Ku+++ywknnFDpuMZM/5K8giLPdXPzGDP9SwAlbSIiVaQ5bCIpxJcU5eTm4fgjKZqxPKfS19x777057rjjmDdvXqWTNYAJc1eXJGs+eQVFTJi7utLXFBERDyVsIikkmknRt99+y9atW6lbty6TJ0/mmGOOqVJsG3PzKnRcREQip4RNJIVEKyn6+uuvOemkk7jggguiERYA+2dlVui4iIhETgmbSAqJRlL0xRdfcPLJJ5OWlsZDDz0UrdAY1acdmRnppY5l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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pylab as pl\n", "pl.figure(figsize=(10,10))\n", "for i, col in [(1, \"mathscr\"), (2, \"readscr\"), (3, \"testscr\")]:\n", " ax = pl.subplot(2,2,i)\n", " ax.scatter(data_test[col], test_data_predictions_2[col])\n", " minval, maxval = data_test[col].min(), data_test[col].max()\n", " ax.plot([minval, maxval], [minval, maxval], ls=\"--\", c=\"k\")\n", " ax.set_xlabel(\"real value\")\n", " ax.set_ylabel(\"prediction\")\n", " ax.set_title(col)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and by the R2 score." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "performance_2 = causal_structure_2.evaluate_objective(Evaluator, data=data_test,\n", " inputs=inputs, outputs=outputs,\n", " metric=\"r2\")" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'performance of simple model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.8020755684153762,\n", " 'mathscr': 0.6574450121854509,\n", " 'testscr': 0.7577271442716229}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'performance of structured model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.7736833098673347,\n", " 'testscr': 0.733377201980135,\n", " 'mathscr': 0.6371819769563171}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"performance of simple model:\")\n", "display({\n", " key: value for key, value in performance_1.items() if key in outputs\n", "})\n", "display(\"performance of structured model:\")\n", "display({\n", " key: value for key, value in performance_2.items() if key in outputs\n", "})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that the R2 scores are actually slightly worse than for the simple causal structure, which only had inputs and outputs. Maybe some of our assumptions were incomplete or even wrong.\n", "\n", "So what have we gained if the prediction performance is not better? We can see that once we start comparing predicions on partial data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparing the performance of the simple and the advanced structure." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we established the performance when predicting the outputs based on all inputs is the same in both models. When all input data are available and the training set and the test set are split randomly it does not matter that much whether the learned behavior is based on real causality or confounders.\n", "\n", "However, if we make predictions from incomplete data, this changes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example 1: predicting based on subsidized meals and CalWorks\n", "Let's try a prediction based on only the amount of subsidized meals and the percentage in the CalWorks program." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'prediction based on simple model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.6342623417400537,\n", " 'mathscr': 0.5509301033970446,\n", " 'testscr': 0.590015453901932}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'prediction based on structured model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.7078249997685941,\n", " 'testscr': 0.6881614958989846,\n", " 'mathscr': 0.6110603334844447}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"prediction based on simple model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_1.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['calwpct', 'mealpct'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})\n", "display(\"prediction based on structured model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_2.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['calwpct', 'mealpct'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see that in this scenario the structured model outperforms the simple model, but both models still achieve decent scores." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example 2: predicting based on CalWorks only\n", "Let's try a prediction based on only the percentage in the CalWorks program." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'prediction based on simple model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': -0.033142940725477965,\n", " 'mathscr': 0.11518897669104289,\n", " 'testscr': 0.029182778885538996}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'prediction based on structured model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.32351923326782916,\n", " 'testscr': 0.3688571477752969,\n", " 'mathscr': 0.37847951309032846}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"prediction based on simple model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_1.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['calwpct'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})\n", "display(\"prediction based on structured model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_2.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['calwpct'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this scenario the structured model outperforms the simple model significantly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example 3: predicting based on district average income\n", "Let's try a prediction based on only the district average income." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'prediction based on simple model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.2816587802736583,\n", " 'mathscr': 0.2002535289464773,\n", " 'testscr': 0.2320481281685418}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "'prediction based on structured model:'" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'readscr': 0.34039792627046295,\n", " 'testscr': 0.3543316153774535,\n", " 'mathscr': 0.3358698650229551}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(\"prediction based on simple model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_1.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['avginc'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})\n", "display(\"prediction based on structured model:\")\n", "display({\n", " key: value for key, value in \n", " causal_structure_2.evaluate_objective(Evaluator, data=data_test,\n", " inputs=['avginc'], outputs=outputs,\n", " metric=\"r2\").items()\n", " if key in outputs\n", "})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this scenario the structured model outperforms the simple model significantly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To summarize, a causal structure based on realistic dependency assumptions will not necessarily outperform a black-box model with only inputs and outputs. It is however, more robust when making predicions based on incomplete data." ] } ], "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.7.9" } }, "nbformat": 4, "nbformat_minor": 4 }