{ "cells": [ { "cell_type": "markdown", "id": "bb568697", "metadata": {}, "source": [ "# RuleFit\n", "`Friedman, Jerome H and Bogdan E Popescu. “Predictive learning via rule ensembles.” The Annals of Applied Statistics. JSTOR, 916–54. (2008).`([pdf](https://jerryfriedman.su.domains/ftp/RuleFit.pdf))\n", "\n", "## 実験用のデータを取得する\n", "openmlで公開されている [house_sales\n", "](https://www.openml.org/d/42092) データセットを使用して回帰モデルを作成します。\n", "\n", "※上記openmlページではデータの出典が不明ですが自分が調べた限りではデータの提供元は[ここ](https://gis-kingcounty.opendata.arcgis.com/datasets/zipcodes-for-king-county-and-surrounding-area-shorelines-zipcode-shore-area/explore?location=47.482924%2C-121.477600%2C8.00&showTable=true)のようです。\n", "\n", "```{hint}\n", "[sklearn.datasets.fetch_openml](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_openml.html)\n", "```\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "fb38444d", "metadata": { "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# Google Colaboratory で実行する場合はインストールする\n", "if str(get_ipython()).startswith(\"\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
bedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongradesqft_abovesqft_basementyr_builtyr_renovatedlatlongsqft_living15sqft_lot15
03.01.001180.05650.01.00.00.03.07.01180.00.01955.00.047.5112-122.2571340.05650.0
13.02.252570.07242.02.00.00.03.07.02170.0400.01951.01991.047.7210-122.3191690.07639.0
22.01.00770.010000.01.00.00.03.06.0770.00.01933.00.047.7379-122.2332720.08062.0
34.03.001960.05000.01.00.00.05.07.01050.0910.01965.00.047.5208-122.3931360.05000.0
43.02.001680.08080.01.00.00.03.08.01680.00.01987.00.047.6168-122.0451800.07503.0
54.04.505420.0101930.01.00.00.03.011.03890.01530.02001.00.047.6561-122.0054760.0101930.0
63.02.251715.06819.02.00.00.03.07.01715.00.01995.00.047.3097-122.3272238.06819.0
73.01.501060.09711.01.00.00.03.07.01060.00.01963.00.047.4095-122.3151650.09711.0
83.01.001780.07470.01.00.00.03.07.01050.0730.01960.00.047.5123-122.3371780.08113.0
93.02.501890.06560.02.00.00.03.07.01890.00.02003.00.047.3684-122.0312390.07570.0
\n", "" ], "text/plain": [ " bedrooms bathrooms sqft_living sqft_lot floors waterfront view \\\n", "0 3.0 1.00 1180.0 5650.0 1.0 0.0 0.0 \n", "1 3.0 2.25 2570.0 7242.0 2.0 0.0 0.0 \n", "2 2.0 1.00 770.0 10000.0 1.0 0.0 0.0 \n", "3 4.0 3.00 1960.0 5000.0 1.0 0.0 0.0 \n", "4 3.0 2.00 1680.0 8080.0 1.0 0.0 0.0 \n", "5 4.0 4.50 5420.0 101930.0 1.0 0.0 0.0 \n", "6 3.0 2.25 1715.0 6819.0 2.0 0.0 0.0 \n", "7 3.0 1.50 1060.0 9711.0 1.0 0.0 0.0 \n", "8 3.0 1.00 1780.0 7470.0 1.0 0.0 0.0 \n", "9 3.0 2.50 1890.0 6560.0 2.0 0.0 0.0 \n", "\n", " condition grade sqft_above sqft_basement yr_built yr_renovated \\\n", "0 3.0 7.0 1180.0 0.0 1955.0 0.0 \n", "1 3.0 7.0 2170.0 400.0 1951.0 1991.0 \n", "2 3.0 6.0 770.0 0.0 1933.0 0.0 \n", "3 5.0 7.0 1050.0 910.0 1965.0 0.0 \n", "4 3.0 8.0 1680.0 0.0 1987.0 0.0 \n", "5 3.0 11.0 3890.0 1530.0 2001.0 0.0 \n", "6 3.0 7.0 1715.0 0.0 1995.0 0.0 \n", "7 3.0 7.0 1060.0 0.0 1963.0 0.0 \n", "8 3.0 7.0 1050.0 730.0 1960.0 0.0 \n", "9 3.0 7.0 1890.0 0.0 2003.0 0.0 \n", "\n", " lat long sqft_living15 sqft_lot15 \n", "0 47.5112 -122.257 1340.0 5650.0 \n", "1 47.7210 -122.319 1690.0 7639.0 \n", "2 47.7379 -122.233 2720.0 8062.0 \n", "3 47.5208 -122.393 1360.0 5000.0 \n", "4 47.6168 -122.045 1800.0 7503.0 \n", "5 47.6561 -122.005 4760.0 101930.0 \n", "6 47.3097 -122.327 2238.0 6819.0 \n", "7 47.4095 -122.315 1650.0 9711.0 \n", "8 47.5123 -122.337 1780.0 8113.0 \n", "9 47.3684 -122.031 2390.0 7570.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.head(10)" ] }, { "cell_type": "markdown", "id": "dd470966", "metadata": {}, "source": [ "## RuleFitを実行する\n", "[Python implementation of the rulefit algorithm - GitHub](https://github.com/christophM/rulefit)の実装を使用してRuleFitを動かしてみます。\n", "\n", "※実行する際は `import warnings;warnings.simplefilter('ignore')` は外してください" ] }, { "cell_type": "code", "execution_count": 5, "id": "55e74f29", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RuleFit(max_rules=100,\n", " tree_generator=GradientBoostingRegressor(learning_rate=0.01,\n", " max_depth=100,\n", " max_leaf_nodes=5,\n", " n_estimators=28,\n", " random_state=27,\n", " subsample=0.04543939429397564))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from rulefit import RuleFit\n", "import warnings\n", "\n", "warnings.simplefilter(\"ignore\") # ConvergenceWarning\n", "\n", "rf = RuleFit(max_rules=100)\n", "rf.fit(X.values, y, feature_names=list(X.columns))" ] }, { "cell_type": "markdown", "id": "5703e9bd", "metadata": {}, "source": [ "## 作成されたルールを確認する" ] }, { "cell_type": "code", "execution_count": 6, "id": "b5f587f7", "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", "
ruletypecoefsupportimportance
8gradelinear6.199314e+041.00000066184.725645
29sqft_living > 9475.0rule1.927942e+060.00101861491.753935
43grade > 8.5 & sqft_living > 3405.0 & long <= -...rule3.570118e+050.02444055126.384264
2sqft_livinglinear5.532732e+011.00000046347.924165
11yr_builtlinear-1.522004e+031.00000044393.726859
15sqft_living15linear5.344916e+011.00000034501.058499
62lat <= 47.516000747680664 & sqft_living <= 3920.0rule-6.549757e+040.36150731467.457947
103sqft_basement <= 3660.0 & grade > 9.5rule1.240216e+050.06822831270.434139
48sqft_living <= 9475.0 & grade > 9.5 & long > -...rule-1.473030e+050.04073329117.596559
67sqft_living <= 4695.0 & waterfront > 0.5 & sqf...rule3.936285e+050.00509228016.079499
\n", "
" ], "text/plain": [ " rule type coef \\\n", "8 grade linear 6.199314e+04 \n", "29 sqft_living > 9475.0 rule 1.927942e+06 \n", "43 grade > 8.5 & sqft_living > 3405.0 & long <= -... rule 3.570118e+05 \n", "2 sqft_living linear 5.532732e+01 \n", "11 yr_built linear -1.522004e+03 \n", "15 sqft_living15 linear 5.344916e+01 \n", "62 lat <= 47.516000747680664 & sqft_living <= 3920.0 rule -6.549757e+04 \n", "103 sqft_basement <= 3660.0 & grade > 9.5 rule 1.240216e+05 \n", "48 sqft_living <= 9475.0 & grade > 9.5 & long > -... rule -1.473030e+05 \n", "67 sqft_living <= 4695.0 & waterfront > 0.5 & sqf... rule 3.936285e+05 \n", "\n", " support importance \n", "8 1.000000 66184.725645 \n", "29 0.001018 61491.753935 \n", "43 0.024440 55126.384264 \n", "2 1.000000 46347.924165 \n", "11 1.000000 44393.726859 \n", "15 1.000000 34501.058499 \n", "62 0.361507 31467.457947 \n", "103 0.068228 31270.434139 \n", "48 0.040733 29117.596559 \n", "67 0.005092 28016.079499 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rules = rf.get_rules()\n", "rules = rules[rules.coef != 0].sort_values(by=\"importance\", ascending=False)\n", "rules.head(10)" ] }, { "cell_type": "markdown", "id": "1224f87a", "metadata": {}, "source": [ "## ルールが正しいか確認してみる" ] }, { "cell_type": "markdown", "id": "c7d600a6", "metadata": {}, "source": [ "`sqft_above\tlinear\t8.632149e+01\t1.000000\t66243.550192` のルールに基づいて、`sqft_above` が増加すると y(`price`)が増える傾向にあるかどうか確認します。\n", "\n", "```{hint}\n", "[matplotlib.pyplot.boxplot — Matplotlib 3.5.1 documentation](https://matplotlib.org/3.5.1/api/_as_gen/matplotlib.pyplot.boxplot.html)\n", "```" ] }, { "cell_type": "code", "execution_count": 7, "id": "3a4b3b9a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'price')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6, 6))\n", "plt.scatter(X[\"sqft_above\"], y, marker=\".\")\n", "plt.xlabel(\"sqft_above\")\n", "plt.ylabel(\"price\")" ] }, { "cell_type": "markdown", "id": "aa296e6c", "metadata": {}, "source": [ "`sqft_living <= 3935.0 & lat <= 47.5314998626709\trule\t-8.271074e+04\t0.377800\t40101.257833` のルールに該当するデータのみ抽出してみます。\n", "係数がマイナスになっているので、このルールに該当するデータのy(`price`)は低い傾向にあるはずです。\n", "log(y)を箱髭図で確認すると、確かにルールに該当しているデータのyはルールに該当しないデータのyと比較すると低くなっています。" ] }, { "cell_type": "code", "execution_count": 8, "id": "39513993", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "applicable_data = np.log(\n", " y[X.query(\"sqft_living <= 3935.0 & lat <= 47.5314998626709\").index]\n", ")\n", "not_applicable_data = np.log(\n", " y[X.query(\"not(sqft_living <= 3935.0 & lat <= 47.5314998626709)\").index]\n", ")\n", "\n", "plt.figure(figsize=(10, 6))\n", "plt.boxplot([applicable_data, not_applicable_data], labels=[\"ルールに該当\", \"ルールに該当しない\"])\n", "plt.ylabel(\"log(price)\")\n", "plt.grid()\n", "plt.show()" ] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 5 }