From bad1db684665c67004b4457318b440e00bd801c5 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Thu, 17 Oct 2024 15:32:22 -0400 Subject: [PATCH] provide alpha to get accuracy more easily --- demo.ipynb | 335 +++++++++++++++++++++-------------------------------- 1 file changed, 132 insertions(+), 203 deletions(-) diff --git a/demo.ipynb b/demo.ipynb index c8a11cb..c06d427 100644 --- a/demo.ipynb +++ b/demo.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -87,7 +87,7 @@ "└────────────┴────────────┴───────────┴───────┘" ] }, - "execution_count": 26, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -108,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -183,7 +183,7 @@ "└────────────┴─────┘" ] }, - "execution_count": 28, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -269,7 +269,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -283,23 +283,32 @@ "epsilon = 2\n", "weights = [4, 4, 1, 1]\n", "delta = 1e-7\n", + "# Accuracy:\n", + "alpha = 0.05\n", "\n", "# Public information you've provided for the \"grade\" column:\n", "grade_min = 50\n", "grade_max = 100\n", "grade_bins_count = 10\n", "\n", + "# Public information you've provided for the \"class_year\" column:\n", + "class_year_min = 1\n", + "class_year_max = 4\n", + "class_year_bins_count = 4" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# From the public information, determine the bins:\n", "grade_bins_list = list(range(\n", " grade_min,\n", " grade_max,\n", " int((grade_max - grade_min + 1) / grade_bins_count)\n", "))\n", - "\n", - "# Public information you've provided for the \"class_year\" column:\n", - "class_year_min = 1\n", - "class_year_max = 4\n", - "class_year_bins_count = 4\n", - "\n", "class_year_bins_list = list(range(\n", " class_year_min,\n", " class_year_max,\n", @@ -316,7 +325,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -361,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -398,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -425,7 +434,7 @@ "└────────┴───────────┴─────────────────┴───────┘" ] }, - "execution_count": 34, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -440,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -453,7 +462,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (1, 1)
grade
f64
82.716049
" + "shape: (1, 1)
grade
f64
84.251403
" ], "text/plain": [ "shape: (1, 1)\n", @@ -462,11 +471,11 @@ "│ --- │\n", "│ f64 │\n", "╞═══════════╡\n", - "│ 82.716049 │\n", + "│ 84.251403 │\n", "└───────────┘" ] }, - "execution_count": 35, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -485,33 +494,16 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "shape: (1, 4)
columnaggregatedistributionscale
strstrstrf64
"len""Len""Integer Laplace"20.0
" - ], "text/plain": [ - "shape: (1, 4)\n", - "┌────────┬───────────┬─────────────────┬───────┐\n", - "│ column ┆ aggregate ┆ distribution ┆ scale │\n", - "│ --- ┆ --- ┆ --- ┆ --- │\n", - "│ str ┆ str ┆ str ┆ f64 │\n", - "╞════════╪═══════════╪═════════════════╪═══════╡\n", - "│ len ┆ Len ┆ Integer Laplace ┆ 20.0 │\n", - "└────────┴───────────┴─────────────────┴───────┘" + "60.40839612201301" ] }, - "execution_count": 36, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -520,36 +512,13 @@ "grade_histogram_query = (context.query()\n", " .group_by(\"grade_bin\")\n", " .agg(pl.len().dp.noise()))\n", - "grade_histogram_summary = grade_histogram_query.summarize()\n", - "grade_histogram_summary" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "60.40839612201301" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grade_histogram_scale = grade_histogram_summary['scale'].item()\n", - "# See the \"distribution\" in the summary above to confirm that discrete laplacian is correct.\n", - "grade_histogram_95_accuracy = dp.discrete_laplacian_scale_to_accuracy(grade_histogram_scale, 0.05)\n", + "grade_histogram_95_accuracy = grade_histogram_query.summarize(alpha=alpha)[\"accuracy\"].item()\n", "grade_histogram_95_accuracy" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -562,7 +531,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (9, 2)
grade_binlen
stru32
"(55, 60]"17
"(60, 65]"11
"(65, 70]"23
"(70, 75]"112
"(75, 80]"264
"(80, 85]"209
"(85, 90]"198
"(90, 95]"67
"(95, inf]"28
" + "shape: (9, 2)
grade_binlen
stru32
"(55, 60]"24
"(60, 65]"0
"(65, 70]"28
"(70, 75]"181
"(75, 80]"227
"(80, 85]"248
"(85, 90]"204
"(90, 95]"110
"(95, inf]"0
" ], "text/plain": [ "shape: (9, 2)\n", @@ -571,19 +540,19 @@ "│ --- ┆ --- │\n", "│ str ┆ u32 │\n", "╞═══════════╪═════╡\n", - "│ (55, 60] ┆ 17 │\n", - "│ (60, 65] ┆ 11 │\n", - "│ (65, 70] ┆ 23 │\n", - "│ (70, 75] ┆ 112 │\n", - "│ (75, 80] ┆ 264 │\n", - "│ (80, 85] ┆ 209 │\n", - "│ (85, 90] ┆ 198 │\n", - "│ (90, 95] ┆ 67 │\n", - "│ (95, inf] ┆ 28 │\n", + "│ (55, 60] ┆ 24 │\n", + "│ (60, 65] ┆ 0 │\n", + "│ (65, 70] ┆ 28 │\n", + "│ (70, 75] ┆ 181 │\n", + "│ (75, 80] ┆ 227 │\n", + "│ (80, 85] ┆ 248 │\n", + "│ (85, 90] ┆ 204 │\n", + "│ (90, 95] ┆ 110 │\n", + "│ (95, inf] ┆ 0 │\n", "└───────────┴─────┘" ] }, - "execution_count": 38, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -599,12 +568,12 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { - "image/png": "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G6eUlBRt2rRJhYWFuvXWWxUeHq6HHnqouV0DAABBotlBZdWqVX6PFy9erKSkJG3btk0jR470zY+OjlZKSkq963jjjTe0e/duvfnmm0pOTtbAgQP1q1/9Svfdd58efPBBRURENLd7AAAgCATsHJWysjJJUkJCgt/8JUuWqFOnTrrwwguVk5OjEydO+Jbl5eWpX79+Sk5O9s3LzMyU1+vVrl276t1OZWWlvF6v3wQAAIJTQH7rp6amRj/5yU90ySWX6MILL/TNv/nmm9WtWzelpqZq+/btuu+++1RQUKC///3vkqSioiK/kCLJ97ioqKjebeXm5mrOnDmB6DYAALBcQIJKVlaWdu7cqbfffttv/owZM3z/7tevnzp37qwrr7xSBw4cUI8ePZq1rZycHGVnZ/see71epaWlNa/jAADAai3+6mfmzJlasWKF1q1bpy5dupyxbUZGhiRp//79kqSUlBQVFxf7tal93NB5LU6nUy6Xy28CAADBqdlBxRijmTNn6qWXXtLatWvVvXv3sz4nPz9fktS5c2dJksfj0Y4dO1RSUuJrs3r1arlcLqWnpze3awAAIEg0+6ufrKwsLV26VK+88ori4uJ855S43W5FRUXpwIEDWrp0qa655hp17NhR27dv16xZszRy5Ej1799fkjRmzBilp6frlltu0bx581RUVKT7779fWVlZcjqdgakQAAC0W80+ovLMM8+orKxMl112mTp37uybXnjhBUlSRESE3nzzTY0ZM0a9e/fW3XffrUmTJum1117zrSM0NFQrVqxQaGioPB6PpkyZoltvvdXvvisAAOCbq9lHVIwxZ1yelpamDRs2nHU93bp10z/+8Y/mdgMAAAQxfusHAABYi6ACAACsRVABAADWIqgAAABrEVQAAIC1CCoAAMBaBBUAAGAtggoAALAWQQUAAFiLoAIAAKxFUAEAANYiqAAAAGsRVAAAgLUIKgAAwFoEFQAAYC2CCgAAsBZBBQAAWIugAgAArEVQAQAA1iKoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABAADWIqgAAABrEVQAAIC1CCoAAMBaYW3dAQCwlcMR+HXGxgZ2fcYEdn2AbTiiAgAArEVQAQAA1iKoAAAAazU7qOTm5mro0KGKi4tTUlKSJkyYoIKCAr82J0+eVFZWljp2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eust07NnT3PTTTfVWdfUqVPNuHHj6q3nscceM6mpqWbJkiVm//795oMPPjCvvPKKb3lZWZlJTk42kydPNjt37jTPP/+8iYqKMr///e+bVM/+/ftNQkKCueeee8z7779v9u/fb1555RW/D95Ro0aZ6dOn+/3dysrK6qzr5z//uQkJCWlyLbWD+8033/TbRlVVVZNq+fpzCwsLzcKFC43D4TAHDhzwtWnsvpk8ebIJCwvzq6X2g//rU2Zmphk1apSvzUcffWSio6NNdna22b17t3nqqadMaGioWbVqVaPrqH2D+fo0Z84cExsb6/fhfbbXfK0RI0aYiIiIJtcSqDFz1VVXmaFDh5rNmzebAwcOmF/96lcmJCTEvP/++742LR0zx48fNwkJCea2224ze/fuNTt37jSTJk0yycnJvtdRoMbM9OnTTY8ePcy6devMwYMHze9//3sTGhrq95puyZhpTC2BGDM1NTVm+PDh5tJLLzVbtmwxe/fuNTNmzDBdu3Y15eXlvnZ33nmnSUtLM2vWrDFbt241w4cPNxdffHGjasnPzzcRERFmzpw5Zt++fWb9+vWmd+/e5u677/a1CcR+aWwtLdkvjaklUO9lzdGxY0ezcOHCOvMfeOABgsq5tnz5cpOYmFhnviTz0ksvNfi82jfdL774okXbz8jIMPfff3+Dy3fv3m0kmffee883b+XKlcbhcJjPPvvMr+3UqVPN0KFD69Rz7NgxExUVZd58880Gt/P000+bDh06mMrKSt+8++67z/Tq1atJ9dxwww1mypQpZ2wzatQo8+Mf//is6/qv//ovExYW5jevMbXUDu7/+7//a0yXG238+PHmiiuu8D1uyr4ZNWqUiYiIOOP6S0pKTHh4uPnzn//sm3fvvfeavn37+rW74YYbTGZmZktKMQMHDjR33HGH37yzveZrpaenm6ioqDO2qa+WQI2ZmJgYv/UaY0xCQoL54x//aIwJzJh57733jCRz6NAh37zt27cbSWbfvn3GmMCNmb59+5q5c+f6zbvooovML37xC9/jloyZxtQSiDFTUFBgJJmdO3f65p0+fdokJib69k1paakJDw83y5cv97XZs2dPvUcJ6qslJyfHDBkyxG/eq6++aiIjI43X6zXGBGa/NKYWY1q2XxpTS6Dey7p162aeeOIJ32NJ5o9//KOZMGGCiYqKMj179vQF4/qO4nz9KO65DiqcoyLprbfe0uDBg+tdlpWVpU6dOmnYsGFauHBhvT9HPXDgQHXu3FlXXXWV3nnnnSZtu6SkRJs3b1ZSUpIuvvhiJScna9SoUXr77bd9bfLy8hQfH68hQ4b45o0ePVohISHavHlznXUePXq0Tj2rV69WTU2NPvvsM/Xp00ddunTR9773PR0+fNhvOyNHjlRERIRvXmZmpgoKCvTFF180qp6amhq9/vrruuCCC5SZmamkpCRlZGTo5ZdfrtN2yZIl6tSpky688ELl5OToxIkTddp88sknioqKanItta677jolJSVpxIgRevXVVxtVQ0OKi4v1+uuva9q0ab55Tdk3JSUlio+PP+M2/vznPys6OlrXX3+93zZGjx7t1y4zM1N5eXnNrmXbtm3Kz8/3q6VWY17zZWVlSkpKOuM26qulVkvGjCRdfPHFeuGFF3Ts2DHV1NRo2bJlOnnypC677DJJgRkzvXr1UseOHfXss8+qqqpKX375pZ599ln16dNH5513nm87LR0ztfW8+uqr+uyzz2SM0bp16/Thhx9qzJgxfu2aO2YaU0utloyZyspKSVJkZKRvXkhIiJxOp+89bdu2baqurvZ7Tffu3Vtdu3at85qur5bKykq/9UtSVFSUTp48qW3btkkKzH5pTC21mrtfGlNLrUC+l9WaM2eOvve972n79u265pprNHnyZB07dkxpaWkqLCyUy+XSk08+qcLCQt1www0B2WZzEFT01QsoNTW1zvy5c+fqxRdf1OrVqzVp0iT98Ic/1FNPPeVb3rlzZy1YsEB/+9vf9Le//U1paWm67LLL9P777zd62x999JEk6cEHH9T06dO1atUqXXTRRbryyiu1b98+SVJRUVGdD4WwsDAlJCSoqKiozjpPnDhRp56PPvpINTU1euihh/Tkk0/qr3/9q44dO6arrrpKVVVVvu0kJyf7Pa/2cX3bqU9JSYnKy8v18MMPa+zYsXrjjTf03e9+VxMnTtSGDRt87W6++Wb95S9/0bp165STk6P//d//1ZQpU+qsr6ysTOHh4U2uJTY2Vo899piWL1+u119/XSNGjNCECRNaNMCfe+45xcXFaeLEib55Tdk35eXldd6U/tOzzz6rm2++2e8NraH94vV69eWXXzarltoPqYsvvthv/tle87VOnjypmJiYJtcSiDEjSS+++KKq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", + "image/png": "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ALAWQQUA8LXl8/nkcDjkcDjk8/lC3R3Ug6ACAACsRVABAADWIqgAAABr8aOEACwVJ4lfQwS+7jiiAgAArEVQAQAA1iKoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABAADWanZQWb9+va666iqlp6fL4XDopZdeClh+yy23+H86u3YaN25cQJsjR45o8uTJcrlcSkxM1LRp01RZWdncLgEAgHam2UHF5/NpwIABeuKJJxpsM27cOBUXF/unZ599NmD55MmTtWPHDq1atUrLly/X+vXrNWPGjOZ2CQAAtDPN/lHCK664QldcccVp2zidTqWlpdW7bNeuXVq5cqXee+89DRkyRJL0+OOP68orr9TDDz+s9PT05nYNAAC0E616jsqbb76plJQU9erVS3fccYcOHz7sX1ZQUKDExER/SJGkMWPGKCwsTBs3bmxwnVVVVfJ6vQETAABon1otqIwbN05//OMftXr1aj300ENat26drrjiCp06dUqSVFJSopSUlIDnREREKCkpSSUlJQ2uNz8/X2632z9lZGS0VgkAACDEmv3Vz5lcf/31/n/369dP/fv3V48ePfTmm2/qsssua/Z68/LylJub63/s9XoJKwAAtFNn7fLkc889V506ddLevXslSWlpaSorKwtoc/LkSR05cqTB81qkL897cblcARMAAGifzlpQ+eSTT3T48GF17txZkuTxeFReXq4tW7b426xZs0Y1NTXKyso6W90CAAAWa/ZXP5WVlf6jI5K0f/9+FRYWKikpSUlJSZozZ44mTZqktLQ07du3T3fffbd69uyp7OxsSVKfPn00btw4TZ8+XQsWLFB1dbVmzpyp66+/nit+AACApBYcUdm8ebMGDRqkQYMGSZJyc3M1aNAgzZ49W+Hh4dq6dauuvvpqnXfeeZo2bZoGDx6st956S06n07+OJUuWqHfv3rrssst05ZVXasSIEfrd737X8qoAAEC74DDGmFB3oiW8Xq/cbrcqKio4XwVtksMRzLX5JMX/69+VkuKCstbGvksEt5bW0ZR3vPZUT3uqJZh8Pp/i478cM5WVlYqLC86YwZk19vOb3/oBAADWIqgAAABrEVQAAIC1CCoAAMBaBBUAAGAtggoAALAWQQUAAFiLoAIAAKxFUAEAANYiqAAAAGsRVAAAgLUIKgAAwFoE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bZpyc3OVlJQkl8ulH/zgB/J4PE2+4gcAALRPrRpUPvnkE91www06fPiwkpOTNWLECL377rtKTk6WJM2fP19hYWGaNGmSqqqqlJ2drSeffLI1uwQAANqQs3oybWvwer1yu91nPBkn1Hw+n//y6crKSutPcjodagkuh+Osb7LJGvsu0Z5qkdpXPdRydoXik9WG97OmaOznt91n2gAAgK81ggoAALAWQQUAAFiLoAIAAKxFUAEAANYiqAAAAGsRVAAAgLUIKgAAwFoEFQAAYC2CCgAAsBZBBQAAWIugAgAArEVQAQAA1ooIdQeA5vhrUXFQ1nP82DH/v1/+sETRsbFBWa8kTezVOWjrAoCvK46oAAAAaxFUAACAtQgqAADAWpyjchrBOg9Car1zITgPAgDQnnFEBQAAWIugAgAArEVQAQAA1iKoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABAADWIqgAAABrEVQAAIC1CCoAAMBaBBUAAGAtggoAALCWFUHliSee0DnnnKPo6GhlZWVp06ZNoe4SAACwQMiDyvPPP6/c3Fzdd999ev/99zVgwABlZ2errKws1F0DAAAhFvKg8uijj2r69Om69dZblZmZqQULFig2NlYLFy4MddcAAECIhTSonDhxQlu2bNGYMWP888LCwjRmzBgVFBTU+5yqqip5vd6ACQAAtE8Rodz4P//5T506dUqpqakB81NTU7V79+56n5Ofn685c+acje5pYq/OQVuXz+fz//ua89IUFxcXtHV/HQVr39iwX4w565tsNe2pFql91UMtaKtC/tVPU+Xl5amiosI/HTx4MNRdAgAArSSkR1Q6deqk8PBwlZaWBswvLS1VWlpavc9xOp1yOp1no3sAACDEQnpEJSoqSoMHD9bq1av982pqarR69Wp5PJ4Q9gwAANggpEdUJCk3N1dTp07VkCFDNGzYMD322GPy+Xy69dZbQ901AAAQYiEPKtddd50+++wzzZ49WyUlJRo4cKBWrlxZ5wRbAADw9RPyoCJJM2fO1MyZM0PdDQAAYJk2d9UPAAD4+iCoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABAADWIqgAAABrEVQAAIC1CCoAAMBaBBUAAGAtggoAALAWQQUAAFiLoAIAAKxF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", "text/plain": [ "
" ] @@ -633,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -646,7 +615,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (1, 1)
class_year
f64
1.755331
" + "shape: (1, 1)
class_year
f64
1.81257
" ], "text/plain": [ "shape: (1, 1)\n", @@ -655,11 +624,11 @@ "│ --- │\n", "│ f64 │\n", "╞════════════╡\n", - "│ 1.755331 │\n", + "│ 1.81257 │\n", "└────────────┘" ] }, - "execution_count": 40, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -680,33 +649,16 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "shape: (1, 4)
columnaggregatedistributionscale
strstrstrf64
"len""Len""Integer Laplace"20.0
" - ], "text/plain": [ - "shape: (1, 4)\n", - "┌────────┬───────────┬─────────────────┬───────┐\n", - "│ column ┆ aggregate ┆ distribution ┆ scale │\n", - "│ --- ┆ --- ┆ --- ┆ --- │\n", - "│ str ┆ str ┆ str ┆ f64 │\n", - "╞════════╪═══════════╪═════════════════╪═══════╡\n", - "│ len ┆ Len ┆ Integer Laplace ┆ 20.0 │\n", - "└────────┴───────────┴─────────────────┴───────┘" + "60.40839612201301" ] }, - "execution_count": 41, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -715,36 +667,13 @@ "class_year_histogram_query = (context.query()\n", " .group_by(\"class_year_bin\")\n", " .agg(pl.len().dp.noise()))\n", - "class_year_histogram_summary = class_year_histogram_query.summarize()\n", - "class_year_histogram_summary" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "60.40839612201301" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "class_year_histogram_scale = class_year_histogram_summary['scale'].item()\n", - "# See the \"distribution\" in the summary above to confirm that discrete laplacian is correct.\n", - "class_year_histogram_95_accuracy = dp.discrete_laplacian_scale_to_accuracy(class_year_histogram_scale, 0.05)\n", + "class_year_histogram_95_accuracy = class_year_histogram_query.summarize(alpha=alpha)[\"accuracy\"].item()\n", "class_year_histogram_95_accuracy" ] }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -757,7 +686,7 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (4, 2)
class_year_binlen
stru32
"(-inf, 1]"419
"(1, 2]"304
"(2, 3]"144
"(3, inf]"39
" + "shape: (4, 2)
class_year_binlen
stru32
"(-inf, 1]"420
"(1, 2]"311
"(2, 3]"80
"(3, inf]"47
" ], "text/plain": [ "shape: (4, 2)\n", @@ -766,14 +695,14 @@ "│ --- ┆ --- │\n", "│ str ┆ u32 │\n", "╞════════════════╪═════╡\n", - "│ (-inf, 1] ┆ 419 │\n", - "│ (1, 2] ┆ 304 │\n", - "│ (2, 3] ┆ 144 │\n", - "│ (3, inf] ┆ 39 │\n", + "│ (-inf, 1] ┆ 420 │\n", + "│ (1, 2] ┆ 311 │\n", + "│ (2, 3] ┆ 80 │\n", + "│ (3, inf] ┆ 47 │\n", "└────────────────┴─────┘" ] }, - "execution_count": 43, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -789,12 +718,12 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { - "image/png": "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b3+UM2TIEN1xxx06cuSI7rzzzlYfr6MiUNrZ559/rrS0tBbdt6GhQcXFxRo6dKiuvPJKTZ8+PfjzSZfLpW7duik+Pl5ut1s9e/aM5LDRCq2Z83DdfffdSktLU1ZWVrsc71zXnLndunWrXnnlFc2aNSvs/e/evVsOh0N2u10333yzVq9erYyMjJYOF2dwtnmcOnWqunbtqvPPP19Op1PPPfdcq4/3s5/9TLfccosGDBigu+++W+edd57effddSd/+KCchIUEOh0Nut1sOh6PVx+uoCJR29s0336hz584htw0ZMkQOh0MOh0Pjx48/43379++vbt26Bb/v3bu3qqqq2mysiIym5rwtLFiwQCtXrtTq1avb5Xj44bnds2ePJkyYoPnz52vcuHFh73/gwIEqKyvTtm3blJeXp9zcXO3bt681Q0YTzjaPixYt0gcffKA33nhDhw4dUkFBQauPN3z48ODXNptNbrebx/Im8CLZdnbeeefpq6++CrltzZo1OnnypCSd9YWxnTp1CvneZrOpoaEh8oNERDU155H22GOPacGCBXr77bdDHvzQts42t/v27dPYsWM1a9YszZ07t0X7T0xM1IABAyRJmZmZ2rFjhxYvXqxnnnmmxWPG6c42j263W263W4MGDVJKSoquvPJK3XPPPerdu3eLj8djefNwBaWdjRgx4rT/AfXr108DBgzQgAEDgu+8QOxoas4jaeHChXrggQe0bt06jRw5ss2Og9OdaW737t2rMWPGKDc3Vw899FDEjtfQ0KDa2tqI7Q/fau6/0caIYA7aB4HSzrKzs7V37942/x91OLxer8rKynTw4EFJ3/7cu6ysTMeOHYvyyGLDmeb84MGDKisrk9fr1TfffKOysjKVlZWprq6u2ft+5JFHdM899+iFF15Q//795fV65fV6VVNTE+nTQBOamts9e/ZozJgxGjdunAoKCoJzcvTo0bD2XVhYqC1btuizzz7T7t27VVhYqE2bNmnatGmRPo1zXlPzuGbNGi1btkx79uzRZ599prfeeks333yzLr/88rN+hhUih0BpZ8OGDdMll1yiV199tV2OV1xcLJvNdtZtli5dqhEjRuimm26SJP3f//2fRowYob/+9a/tMcSYd6Y5//Wvf60RI0bomWee0UcffaQRI0ZoxIgRqqioCG5js9lUXFx8xn0vWbJEdXV1mjx5snr37h1cHnvssbY6HXxHU3P75z//WUePHtWLL74YMieXXnppcJvPPvtMNptNmzZtOuO+q6qqNGPGDA0cOFBjx47Vjh07tH79el1zzTVteUrnpKbmsUuXLnr22Wd1xRVXaPDgwZozZ45+/vOfq6SkJLhNc+YRrRDt9zmfi0pKSqzBgwdb9fX1bX6sefPmWVdddVVE9nWuvQc/kloy55988omVkJBgffTRR60+Pp+D0nZaMrfvvPOOlZycbB07dqzVx+dzUCIj2vPYHOfaYzAvko2CnJwcffzxx/riiy+Unp7epsdau3at/vCHP7R6Pw6HQ6dOneLdIS3Ukjlfs2aNZs2apQsvvLBVxx4/fry2bNnSqn3gzFo6t7/73e/UvXv3Vh17yJAh+uSTT1q1D3wrmvPYHOfiY7DNsiwr2oOA+RpfnxIfH68LLrggyqNBOL744gt98803kqS+ffsqMTExyiNCpHz++efBdwD+6Ec/UlwcP7WPVefiYzCBAgAAjENuAwAA4xAoAADAOAQKAAAwDoECAACMQ6AAAADjECgAAMA4BAoAADAOgQIAAIzz/1OlcW28zL6fAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -827,7 +756,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -841,24 +770,24 @@ " 'delta': 1e-07,\n", " 'grade': {'min': 50, 'max': 100, 'bins_count': 10},\n", " 'class_year': {'min': 1, 'max': 4, 'bins_count': 4}},\n", - " 'outputs': {'grade': {'mean': 82.71604938271605,\n", - " 'histogram': {'(55, 60]': 17,\n", - " '(60, 65]': 11,\n", - " '(65, 70]': 23,\n", - " '(70, 75]': 112,\n", - " '(75, 80]': 264,\n", - " '(80, 85]': 209,\n", - " '(85, 90]': 198,\n", - " '(90, 95]': 67,\n", - " '(95, inf]': 28}},\n", - " 'class_year': {'mean': 1.755331088664422,\n", - " 'histogram': {'(-inf, 1]': 419,\n", - " '(1, 2]': 304,\n", - " '(2, 3]': 144,\n", - " '(3, inf]': 39}}}}" + " 'outputs': {'grade': {'mean': 84.25140291806959,\n", + " 'histogram': {'(55, 60]': 24,\n", + " '(60, 65]': 0,\n", + " '(65, 70]': 28,\n", + " '(70, 75]': 181,\n", + " '(75, 80]': 227,\n", + " '(80, 85]': 248,\n", + " '(85, 90]': 204,\n", + " '(90, 95]': 110,\n", + " '(95, inf]': 0}},\n", + " 'class_year': {'mean': 1.8125701459034793,\n", + " 'histogram': {'(-inf, 1]': 420,\n", + " '(1, 2]': 311,\n", + " '(2, 3]': 80,\n", + " '(3, inf]': 47}}}}" ] }, - "execution_count": 45, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -908,7 +837,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -937,23 +866,23 @@ "outputs:\n", " class_year:\n", " histogram:\n", - " (-inf, 1]: 419\n", - " (1, 2]: 304\n", - " (2, 3]: 144\n", - " (3, inf]: 39\n", - " mean: 1.755331088664422\n", + " (-inf, 1]: 420\n", + " (1, 2]: 311\n", + " (2, 3]: 80\n", + " (3, inf]: 47\n", + " mean: 1.8125701459034793\n", " grade:\n", " histogram:\n", - " (55, 60]: 17\n", - " (60, 65]: 11\n", - " (65, 70]: 23\n", - " (70, 75]: 112\n", - " (75, 80]: 264\n", - " (80, 85]: 209\n", - " (85, 90]: 198\n", - " (90, 95]: 67\n", - " (95, inf]: 28\n", - " mean: 82.71604938271605\n", + " (55, 60]: 24\n", + " (60, 65]: 0\n", + " (65, 70]: 28\n", + " (70, 75]: 181\n", + " (75, 80]: 227\n", + " (80, 85]: 248\n", + " (85, 90]: 204\n", + " (90, 95]: 110\n", + " (95, inf]: 0\n", + " mean: 84.25140291806959\n", "\n" ] } @@ -975,7 +904,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1053,63 +982,63 @@ " \n", " \n", " outputs.grade.mean\n", - " 82.716049\n", + " 84.251403\n", " \n", " \n", " outputs.grade.histogram.(55, 60]\n", - " 17\n", + " 24\n", " \n", " \n", " outputs.grade.histogram.(60, 65]\n", - " 11\n", + " 0\n", " \n", " \n", " outputs.grade.histogram.(65, 70]\n", - " 23\n", + " 28\n", " \n", " \n", " outputs.grade.histogram.(70, 75]\n", - " 112\n", + " 181\n", " \n", " \n", " outputs.grade.histogram.(75, 80]\n", - " 264\n", + " 227\n", " \n", " \n", " outputs.grade.histogram.(80, 85]\n", - " 209\n", + " 248\n", " \n", " \n", " outputs.grade.histogram.(85, 90]\n", - " 198\n", + " 204\n", " \n", " \n", " outputs.grade.histogram.(90, 95]\n", - " 67\n", + " 110\n", " \n", " \n", " outputs.grade.histogram.(95, inf]\n", - " 28\n", + " 0\n", " \n", " \n", " outputs.class_year.mean\n", - " 1.755331\n", + " 1.81257\n", " \n", " \n", " outputs.class_year.histogram.(-inf, 1]\n", - " 419\n", + " 420\n", " \n", " \n", " outputs.class_year.histogram.(1, 2]\n", - " 304\n", + " 311\n", " \n", " \n", " outputs.class_year.histogram.(2, 3]\n", - " 144\n", + " 80\n", " \n", " \n", " outputs.class_year.histogram.(3, inf]\n", - " 39\n", + " 47\n", " \n", " \n", "\n", @@ -1129,24 +1058,24 @@ "inputs.class_year.min 1\n", "inputs.class_year.max 4\n", "inputs.class_year.bins_count 4\n", - "outputs.grade.mean 82.716049\n", - "outputs.grade.histogram.(55, 60] 17\n", - "outputs.grade.histogram.(60, 65] 11\n", - "outputs.grade.histogram.(65, 70] 23\n", - "outputs.grade.histogram.(70, 75] 112\n", - "outputs.grade.histogram.(75, 80] 264\n", - "outputs.grade.histogram.(80, 85] 209\n", - "outputs.grade.histogram.(85, 90] 198\n", - "outputs.grade.histogram.(90, 95] 67\n", - "outputs.grade.histogram.(95, inf] 28\n", - "outputs.class_year.mean 1.755331\n", - "outputs.class_year.histogram.(-inf, 1] 419\n", - "outputs.class_year.histogram.(1, 2] 304\n", - "outputs.class_year.histogram.(2, 3] 144\n", - "outputs.class_year.histogram.(3, inf] 39" + "outputs.grade.mean 84.251403\n", + "outputs.grade.histogram.(55, 60] 24\n", + "outputs.grade.histogram.(60, 65] 0\n", + "outputs.grade.histogram.(65, 70] 28\n", + "outputs.grade.histogram.(70, 75] 181\n", + "outputs.grade.histogram.(75, 80] 227\n", + "outputs.grade.histogram.(80, 85] 248\n", + "outputs.grade.histogram.(85, 90] 204\n", + "outputs.grade.histogram.(90, 95] 110\n", + "outputs.grade.histogram.(95, inf] 0\n", + "outputs.class_year.mean 1.81257\n", + "outputs.class_year.histogram.(-inf, 1] 420\n", + "outputs.class_year.histogram.(1, 2] 311\n", + "outputs.class_year.histogram.(2, 3] 80\n", + "outputs.class_year.histogram.(3, inf] 47" ] }, - "execution_count": 47, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" }