{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "3fb7b88f-08d6-47b5-9c0a-a5a881c70a06", "metadata": {}, "source": [ "# 多項ロジットモデル" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f1f520d5-7de8-4f5c-9467-83c42cfab30b", "metadata": {}, "source": [ "**多項ロジットモデル(multinomial logt model)**\n", "多項ロジットモデルは、被説明変数が取りうる値が3つ以上で、それらに順序がない場合に適用します。\n", "\n", "例えば、移動手段(バス・自動車・電車・徒歩・自転車・その他)を選択肢から選ぶ場合や、消費者が購入する商品を、ブランドA、ブランドB、ブランドCから選択する場合などに適用することができます。\n", "\n", "\n", "`statsmodels`を用いて推定します。\n", " \n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "97dfb2ec-0a0c-4f07-bb9a-9a71d8f245f1", "metadata": {}, "source": [ "ここではスマートフォンを用いて収集されたセンサーデータから、スマートフォンユーザーの移動手段を推定する例を考えます。\n", "\n", "このデータは、13人のボランティア(男性10名、女性3名)のスマートフォンから収集したデータで、徒歩、車、静止状態、電車、バスの5クラスで構成されています。\n", "\n", "データ出典: http://cs.unibo.it/projects/us-tm2017/index.html\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "59fda80a-e557-4340-8ac0-e3d04ea3e211", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import statsmodels.api as sm\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a7d69837-c602-4a12-8b61-9b70e00df5ad", "metadata": {}, "source": [ "まずはデータをダウンロードします。" ] }, { "cell_type": "code", "execution_count": 2, "id": "b708a515-40a5-44a2-a68f-3388d77e4614", "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", "
dataset_5secondWindow.csvidtimeactivityrecognition#0activityrecognition#1android.sensor.accelerometer#meanandroid.sensor.accelerometer#minandroid.sensor.accelerometer#maxandroid.sensor.accelerometer#stdandroid.sensor.game_rotation_vector#meanandroid.sensor.game_rotation_vector#minandroid.sensor.game_rotation_vector#maxandroid.sensor.game_rotation_vector#stdandroid.sensor.gravity#meanandroid.sensor.gravity#minandroid.sensor.gravity#maxandroid.sensor.gravity#stdandroid.sensor.gyroscope#meanandroid.sensor.gyroscope#minandroid.sensor.gyroscope#maxandroid.sensor.gyroscope#stdandroid.sensor.gyroscope_uncalibrated#meanandroid.sensor.gyroscope_uncalibrated#minandroid.sensor.gyroscope_uncalibrated#maxandroid.sensor.gyroscope_uncalibrated#stdandroid.sensor.light#meanandroid.sensor.light#minandroid.sensor.light#maxandroid.sensor.light#stdandroid.sensor.linear_acceleration#meanandroid.sensor.linear_acceleration#minandroid.sensor.linear_acceleration#maxandroid.sensor.linear_acceleration#stdandroid.sensor.magnetic_field#meanandroid.sensor.magnetic_field#minandroid.sensor.magnetic_field#maxandroid.sensor.magnetic_field#stdandroid.sensor.magnetic_field_uncalibrated#meanandroid.sensor.magnetic_field_uncalibrated#minandroid.sensor.magnetic_field_uncalibrated#maxandroid.sensor.magnetic_field_uncalibrated#stdandroid.sensor.orientation#meanandroid.sensor.orientation#minandroid.sensor.orientation#maxandroid.sensor.orientation#stdandroid.sensor.pressure#meanandroid.sensor.pressure#minandroid.sensor.pressure#maxandroid.sensor.pressure#stdandroid.sensor.proximity#meanandroid.sensor.proximity#minandroid.sensor.proximity#maxandroid.sensor.proximity#stdandroid.sensor.rotation_vector#meanandroid.sensor.rotation_vector#minandroid.sensor.rotation_vector#maxandroid.sensor.rotation_vector#stdandroid.sensor.step_counter#meanandroid.sensor.step_counter#minandroid.sensor.step_counter#maxandroid.sensor.step_counter#stdsound#meansound#minsound#maxsound#stdspeed#meanspeed#minspeed#maxspeed#stdtargetuser
00.016170.078.0NaN100.09.8114769.7588959.8494110.0146260.0293400.0290140.0295260.0001199.8066509.8066499.8066514.780692e-070.0016510.0000000.0035330.0007370.0162210.0141720.0186950.0009820.00.00.00.00.0209780.0024950.052410.01104557.09963856.69038757.5759500.17754951.36356651.19970751.5392080.080899354.286933353.598335354.9427070.2456761004.0902611004.055401004.127900.0174168.08.08.0NaN0.0504130.0447770.0563510.00210928966.028966.028966.0NaNNaNNaNNaNNaN0.0000000.0000000.0000000.000000StillU12
11.015871.0145.0NaN100.09.9392077.70743717.1466311.7759440.9999250.9999030.9999460.0000309.8066249.8066249.8066246.474977e-070.0363260.0116690.0593880.0202900.0390230.0141320.0854940.0186290.00.00.0NaN0.8792200.6411171.185810.27873029.35128828.17250530.3860170.92154782.76776082.40989083.1256300.506105332.695577330.461054339.1086071.7058161008.2746601008.274661008.27466NaNNaNNaNNaNNaN0.9999810.9999630.9999990.000026NaNNaNNaNNaN89.2002189.06514389.3352770.19101316.53934916.53934916.5393490.628595CarU12
\n", "
" ], "text/plain": [ " dataset_5secondWindow.csv id time activityrecognition#0 \\\n", "0 0.0 16170.0 78.0 NaN \n", "1 1.0 15871.0 145.0 NaN \n", "\n", " activityrecognition#1 android.sensor.accelerometer#mean \\\n", "0 100.0 9.811476 \n", "1 100.0 9.939207 \n", "\n", " android.sensor.accelerometer#min android.sensor.accelerometer#max \\\n", "0 9.758895 9.849411 \n", "1 7.707437 17.146631 \n", "\n", " android.sensor.accelerometer#std android.sensor.game_rotation_vector#mean \\\n", "0 0.014626 0.029340 \n", "1 1.775944 0.999925 \n", "\n", " android.sensor.game_rotation_vector#min \\\n", "0 0.029014 \n", "1 0.999903 \n", "\n", " android.sensor.game_rotation_vector#max \\\n", "0 0.029526 \n", "1 0.999946 \n", "\n", " android.sensor.game_rotation_vector#std android.sensor.gravity#mean \\\n", "0 0.000119 9.806650 \n", "1 0.000030 9.806624 \n", "\n", " android.sensor.gravity#min android.sensor.gravity#max \\\n", "0 9.806649 9.806651 \n", "1 9.806624 9.806624 \n", "\n", " android.sensor.gravity#std android.sensor.gyroscope#mean \\\n", "0 4.780692e-07 0.001651 \n", "1 6.474977e-07 0.036326 \n", "\n", " android.sensor.gyroscope#min android.sensor.gyroscope#max \\\n", "0 0.000000 0.003533 \n", "1 0.011669 0.059388 \n", "\n", " android.sensor.gyroscope#std android.sensor.gyroscope_uncalibrated#mean \\\n", "0 0.000737 0.016221 \n", "1 0.020290 0.039023 \n", "\n", " android.sensor.gyroscope_uncalibrated#min \\\n", "0 0.014172 \n", "1 0.014132 \n", "\n", " android.sensor.gyroscope_uncalibrated#max \\\n", "0 0.018695 \n", "1 0.085494 \n", "\n", " android.sensor.gyroscope_uncalibrated#std android.sensor.light#mean \\\n", "0 0.000982 0.0 \n", "1 0.018629 0.0 \n", "\n", " android.sensor.light#min android.sensor.light#max \\\n", "0 0.0 0.0 \n", "1 0.0 0.0 \n", "\n", " android.sensor.light#std android.sensor.linear_acceleration#mean \\\n", "0 0.0 0.020978 \n", "1 NaN 0.879220 \n", "\n", " android.sensor.linear_acceleration#min \\\n", "0 0.002495 \n", "1 0.641117 \n", "\n", " android.sensor.linear_acceleration#max \\\n", "0 0.05241 \n", "1 1.18581 \n", "\n", " android.sensor.linear_acceleration#std android.sensor.magnetic_field#mean \\\n", "0 0.011045 57.099638 \n", "1 0.278730 29.351288 \n", "\n", " android.sensor.magnetic_field#min android.sensor.magnetic_field#max \\\n", "0 56.690387 57.575950 \n", "1 28.172505 30.386017 \n", "\n", " android.sensor.magnetic_field#std \\\n", "0 0.177549 \n", "1 0.921547 \n", "\n", " android.sensor.magnetic_field_uncalibrated#mean \\\n", "0 51.363566 \n", "1 82.767760 \n", "\n", " android.sensor.magnetic_field_uncalibrated#min \\\n", "0 51.199707 \n", "1 82.409890 \n", "\n", " android.sensor.magnetic_field_uncalibrated#max \\\n", "0 51.539208 \n", "1 83.125630 \n", "\n", " android.sensor.magnetic_field_uncalibrated#std \\\n", "0 0.080899 \n", "1 0.506105 \n", "\n", " android.sensor.orientation#mean android.sensor.orientation#min \\\n", "0 354.286933 353.598335 \n", "1 332.695577 330.461054 \n", "\n", " android.sensor.orientation#max android.sensor.orientation#std \\\n", "0 354.942707 0.245676 \n", "1 339.108607 1.705816 \n", "\n", " android.sensor.pressure#mean android.sensor.pressure#min \\\n", "0 1004.090261 1004.05540 \n", "1 1008.274660 1008.27466 \n", "\n", " android.sensor.pressure#max android.sensor.pressure#std \\\n", "0 1004.12790 0.017416 \n", "1 1008.27466 NaN \n", "\n", " android.sensor.proximity#mean android.sensor.proximity#min \\\n", "0 8.0 8.0 \n", "1 NaN NaN \n", "\n", " android.sensor.proximity#max android.sensor.proximity#std \\\n", "0 8.0 NaN \n", "1 NaN NaN \n", "\n", " android.sensor.rotation_vector#mean android.sensor.rotation_vector#min \\\n", "0 0.050413 0.044777 \n", "1 0.999981 0.999963 \n", "\n", " android.sensor.rotation_vector#max android.sensor.rotation_vector#std \\\n", "0 0.056351 0.002109 \n", "1 0.999999 0.000026 \n", "\n", " android.sensor.step_counter#mean android.sensor.step_counter#min \\\n", "0 28966.0 28966.0 \n", "1 NaN NaN \n", "\n", " android.sensor.step_counter#max android.sensor.step_counter#std \\\n", "0 28966.0 NaN \n", "1 NaN NaN \n", "\n", " sound#mean sound#min sound#max sound#std speed#mean speed#min \\\n", "0 NaN NaN NaN NaN 0.000000 0.000000 \n", "1 89.20021 89.065143 89.335277 0.191013 16.539349 16.539349 \n", "\n", " speed#max speed#std target user \n", "0 0.000000 0.000000 Still U12 \n", "1 16.539349 0.628595 Car U12 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url = \"http://cs.unibo.it/projects/us-tm2017/static/dataset/extension/5second/csv/dataset_5secondWindow.tar.gz\"\n", "df = pd.read_csv(url, compression='gzip', header=0, sep=',', quotechar='\"', on_bad_lines='warn')\n", "#最初の数行を表示させます\n", "pd.set_option('display.max_columns', 100) # すべての列がNotebook上で表示されるように、オプション設定を変更します。\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": 3, "id": "11bf306d-555e-4f55-aef2-25d62b82f30f", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/x2/7ss5kcb12n1gtlpc8p2mtjtw0000gn/T/ipykernel_65166/2509734072.py:2: FutureWarning: The default value of regex will change from True to False in a future version.\n", " df.columns = df.columns.str.replace('android.sensor.','').str.replace('#','_')\n" ] } ], "source": [ "# カラム名をわかりやすさのため変更します\n", "df.columns = df.columns.str.replace('android.sensor.','').str.replace('#','_')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "bbeb12c2-a2f1-487d-a18c-d8bbeca0558d", "metadata": {}, "source": [ "ここでは、移動手段(Car, Still, Train, Bus, Walking)を次の変数を用いて推定するモデルを考えます。\n", "\n", "* `accelerometer_mean`\n", "* `game_rotation_vector_mean`\n", "* `gyroscope_mean`\n", "* `linear_acceleration_mean`\n", "* `orientation_mean` \n", "* `pressure_mean`\n", "* `rotation_vector_mean`\n", "* `sound_mean`\n", "\n", "上の変数の欠損している行を分析から除外します。" ] }, { "cell_type": "code", "execution_count": 4, "id": "745f5be0-27f3-43df-9a91-47e0c8bec2aa", "metadata": {}, "outputs": [], "source": [ "df = df[[\n", " 'target','accelerometer_mean','game_rotation_vector_mean',\n", " 'gyroscope_mean','linear_acceleration_mean','orientation_mean', \n", " 'pressure_mean','rotation_vector_mean','sound_mean'\n", "]]\n", "df = df.dropna()" ] }, { "cell_type": "code", "execution_count": 5, "id": "15726ede-4eac-4f13-95a7-303d678b2b24", "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", "
accelerometer_meangame_rotation_vector_meangyroscope_meanlinear_acceleration_meanorientation_meanpressure_meanrotation_vector_meansound_mean
count1255.0000001255.0000001255.0000001255.0000001255.0000001255.0000001255.0000001255.000000
mean9.9962230.7320830.3257441.507555208.5331991020.5771420.76848475.202876
std0.7200970.2466790.4961711.89007492.27367115.1734930.22441612.239499
min7.3690550.0426840.0011640.00944717.135360946.3398400.1208130.000000
25%9.7381440.5701530.0272390.272564135.3269071011.0556250.66863371.869349
50%9.8307310.7636460.0836990.707634206.2084591020.6690000.81346577.707224
75%10.0494280.9697170.5129462.083757291.2817981029.1233000.95966882.794433
max14.6611390.9999993.26886018.141770396.1334981058.6099001.00000090.308734
\n", "
" ], "text/plain": [ " accelerometer_mean game_rotation_vector_mean gyroscope_mean \\\n", "count 1255.000000 1255.000000 1255.000000 \n", "mean 9.996223 0.732083 0.325744 \n", "std 0.720097 0.246679 0.496171 \n", "min 7.369055 0.042684 0.001164 \n", "25% 9.738144 0.570153 0.027239 \n", "50% 9.830731 0.763646 0.083699 \n", "75% 10.049428 0.969717 0.512946 \n", "max 14.661139 0.999999 3.268860 \n", "\n", " linear_acceleration_mean orientation_mean pressure_mean \\\n", "count 1255.000000 1255.000000 1255.000000 \n", "mean 1.507555 208.533199 1020.577142 \n", "std 1.890074 92.273671 15.173493 \n", "min 0.009447 17.135360 946.339840 \n", "25% 0.272564 135.326907 1011.055625 \n", "50% 0.707634 206.208459 1020.669000 \n", "75% 2.083757 291.281798 1029.123300 \n", "max 18.141770 396.133498 1058.609900 \n", "\n", " rotation_vector_mean sound_mean \n", "count 1255.000000 1255.000000 \n", "mean 0.768484 75.202876 \n", "std 0.224416 12.239499 \n", "min 0.120813 0.000000 \n", "25% 0.668633 71.869349 \n", "50% 0.813465 77.707224 \n", "75% 0.959668 82.794433 \n", "max 1.000000 90.308734 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 7, "id": "f965f6cc-5f51-46a6-8839-ab6cae3e6c25", "metadata": {}, "outputs": [], "source": [ "x = df.drop('target', axis=1)\n", "y = df['target']" ] }, { "cell_type": "code", "execution_count": 8, "id": "e4680aed-a229-40b5-860c-f3ea05910bf9", "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", "
accelerometer_meangame_rotation_vector_meangyroscope_meanlinear_acceleration_meanorientation_meanpressure_meanrotation_vector_meansound_mean
accelerometer_mean1.0000000.1296950.5002630.4414530.043532-0.0458480.0814030.138451
game_rotation_vector_mean0.1296951.0000000.2970290.3959250.215494-0.1448260.4882420.179971
gyroscope_mean0.5002630.2970291.0000000.7320750.050534-0.0328370.1690350.017961
linear_acceleration_mean0.4414530.3959250.7320751.0000000.096761-0.0999970.2262980.072577
orientation_mean0.0435320.2154940.0505340.0967611.0000000.007241-0.0071240.016743
pressure_mean-0.045848-0.144826-0.032837-0.0999970.0072411.000000-0.2889260.054731
rotation_vector_mean0.0814030.4882420.1690350.226298-0.007124-0.2889261.000000-0.010011
sound_mean0.1384510.1799710.0179610.0725770.0167430.054731-0.0100111.000000
\n", "
" ], "text/plain": [ " accelerometer_mean game_rotation_vector_mean \\\n", "accelerometer_mean 1.000000 0.129695 \n", "game_rotation_vector_mean 0.129695 1.000000 \n", "gyroscope_mean 0.500263 0.297029 \n", "linear_acceleration_mean 0.441453 0.395925 \n", "orientation_mean 0.043532 0.215494 \n", "pressure_mean -0.045848 -0.144826 \n", "rotation_vector_mean 0.081403 0.488242 \n", "sound_mean 0.138451 0.179971 \n", "\n", " gyroscope_mean linear_acceleration_mean \\\n", "accelerometer_mean 0.500263 0.441453 \n", "game_rotation_vector_mean 0.297029 0.395925 \n", "gyroscope_mean 1.000000 0.732075 \n", "linear_acceleration_mean 0.732075 1.000000 \n", "orientation_mean 0.050534 0.096761 \n", "pressure_mean -0.032837 -0.099997 \n", "rotation_vector_mean 0.169035 0.226298 \n", "sound_mean 0.017961 0.072577 \n", "\n", " orientation_mean pressure_mean \\\n", "accelerometer_mean 0.043532 -0.045848 \n", "game_rotation_vector_mean 0.215494 -0.144826 \n", "gyroscope_mean 0.050534 -0.032837 \n", "linear_acceleration_mean 0.096761 -0.099997 \n", "orientation_mean 1.000000 0.007241 \n", "pressure_mean 0.007241 1.000000 \n", "rotation_vector_mean -0.007124 -0.288926 \n", "sound_mean 0.016743 0.054731 \n", "\n", " rotation_vector_mean sound_mean \n", "accelerometer_mean 0.081403 0.138451 \n", "game_rotation_vector_mean 0.488242 0.179971 \n", "gyroscope_mean 0.169035 0.017961 \n", "linear_acceleration_mean 0.226298 0.072577 \n", "orientation_mean -0.007124 0.016743 \n", "pressure_mean -0.288926 0.054731 \n", "rotation_vector_mean 1.000000 -0.010011 \n", "sound_mean -0.010011 1.000000 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.corr()" ] }, { "cell_type": "code", "execution_count": 9, "id": "3119e062-fcbc-41d0-b4cc-47480da6aaa9", "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", "
target
Walking346
Train311
Car310
Bus220
Still68
\n", "
" ], "text/plain": [ " target\n", "Walking 346\n", "Train 311\n", "Car 310\n", "Bus 220\n", "Still 68" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y.value_counts().to_frame()" ] }, { "cell_type": "code", "execution_count": 10, "id": "fd3977f6-1f98-4ffe-af57-0f5d1f576bbf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: 0.488472\n", " Iterations 11\n", " MNLogit Regression Results \n", "==============================================================================\n", "Dep. Variable: target No. Observations: 1255\n", "Model: MNLogit Df Residuals: 1219\n", "Method: MLE Df Model: 32\n", "Date: Wed, 17 May 2023 Pseudo R-squ.: 0.6764\n", "Time: 11:16:00 Log-Likelihood: -613.03\n", "converged: True LL-Null: -1894.5\n", "Covariance Type: nonrobust LLR p-value: 0.000\n", "=============================================================================================\n", " target=Car coef std err z P>|z| [0.025 0.975]\n", "---------------------------------------------------------------------------------------------\n", "accelerometer_mean -1.3405 0.326 -4.117 0.000 -1.979 -0.702\n", "game_rotation_vector_mean -2.8793 0.932 -3.088 0.002 -4.707 -1.052\n", "gyroscope_mean -1.2694 0.827 -1.535 0.125 -2.890 0.351\n", "linear_acceleration_mean -0.3871 0.224 -1.730 0.084 -0.826 0.052\n", "orientation_mean -0.0100 0.002 -4.722 0.000 -0.014 -0.006\n", "pressure_mean -0.2423 0.022 -11.012 0.000 -0.285 -0.199\n", "rotation_vector_mean -6.5886 1.024 -6.433 0.000 -8.596 -4.581\n", "sound_mean 0.1831 0.023 8.124 0.000 0.139 0.227\n", "const 255.7548 23.220 11.014 0.000 210.244 301.266\n", "---------------------------------------------------------------------------------------------\n", " target=Still coef std err z P>|z| [0.025 0.975]\n", "---------------------------------------------------------------------------------------------\n", "accelerometer_mean -2.3018 1.406 -1.638 0.101 -5.057 0.453\n", "game_rotation_vector_mean -1.4923 1.166 -1.280 0.201 -3.778 0.793\n", "gyroscope_mean 2.0263 1.769 1.145 0.252 -1.441 5.494\n", "linear_acceleration_mean -6.1539 1.390 -4.427 0.000 -8.879 -3.429\n", "orientation_mean -0.0112 0.003 -3.412 0.001 -0.018 -0.005\n", "pressure_mean -0.1061 0.031 -3.456 0.001 -0.166 -0.046\n", "rotation_vector_mean -3.7290 1.312 -2.843 0.004 -6.300 -1.158\n", "sound_mean -0.1043 0.025 -4.151 0.000 -0.154 -0.055\n", "const 144.7582 35.347 4.095 0.000 75.479 214.037\n", "---------------------------------------------------------------------------------------------\n", " target=Train coef std err z P>|z| [0.025 0.975]\n", "---------------------------------------------------------------------------------------------\n", "accelerometer_mean -0.4580 0.518 -0.883 0.377 -1.474 0.558\n", "game_rotation_vector_mean 0.9464 0.830 1.140 0.254 -0.681 2.574\n", "gyroscope_mean 0.0587 0.632 0.093 0.926 -1.180 1.298\n", "linear_acceleration_mean -1.7283 0.255 -6.766 0.000 -2.229 -1.228\n", "orientation_mean -0.0237 0.002 -11.086 0.000 -0.028 -0.019\n", "pressure_mean 0.0276 0.011 2.432 0.015 0.005 0.050\n", "rotation_vector_mean -8.2604 0.901 -9.171 0.000 -10.026 -6.495\n", "sound_mean 0.1133 0.020 5.724 0.000 0.075 0.152\n", "const -20.3954 13.175 -1.548 0.122 -46.217 5.426\n", "---------------------------------------------------------------------------------------------\n", " target=Walking coef std err z P>|z| [0.025 0.975]\n", "---------------------------------------------------------------------------------------------\n", "accelerometer_mean 0.1972 0.211 0.934 0.350 -0.216 0.611\n", "game_rotation_vector_mean 8.2232 1.216 6.762 0.000 5.840 10.607\n", "gyroscope_mean 3.3952 0.576 5.897 0.000 2.267 4.524\n", "linear_acceleration_mean 0.8137 0.132 6.149 0.000 0.554 1.073\n", "orientation_mean -0.0108 0.002 -4.662 0.000 -0.015 -0.006\n", "pressure_mean 0.0122 0.015 0.817 0.414 -0.017 0.042\n", "rotation_vector_mean -6.9962 1.184 -5.908 0.000 -9.317 -4.675\n", "sound_mean -0.0786 0.016 -4.811 0.000 -0.111 -0.047\n", "const -9.8708 15.770 -0.626 0.531 -40.779 21.037\n", "=============================================================================================\n" ] } ], "source": [ "x = sm.add_constant(x, prepend = False)\n", "mnlogit_mod = sm.MNLogit(y, x,\n", " # method=\"bfgs\", \n", " # maxiter=250\n", " )\n", "mnlogit_fit = mnlogit_mod.fit()\n", "print (mnlogit_fit.summary())" ] }, { "attachments": {}, "cell_type": "markdown", "id": "07724620-5ad7-4e8c-a625-57fae1a67f67", "metadata": {}, "source": [ "多項ロジットモデルでは、選択肢の数をkとするとk-1個のモデルを推定します。\n", "上の出力を見ると、5つの選択肢のうちBusがベース(参照グループ)として設定されているため、出力された結果を見る際には、パラメーターの推定値は、参照グループであるバスに対する相対的なものとなります。\n", "\n", "多項ロジットモデルでの一般的な解釈は、説明変数の単位変化に対して、参照グループに対して、モデル内の他の変数が一定である場合、パラメーター推定値の分だけ変化すると期待されることになります。\n", "\n", "上の結果で`target=Car`の出力結果では、バスと車の相対比較を示しています。\n", "\n", "`accelerometer_mean`の推定された係数は`-1.340`で、モデル内の他の変数が一定である場合、バスに対する車の`accelerometer_mean`の値が1単位増えると、バスより車である可能性は1.340減少すると解釈できます。\n", "\n", "同様に、`game_rotation_vector_mean`が1単位増えると、モデル内の他の変数が一定である場合、ユーザーの移動手段はバスであるよりも車である可能性が2.8793減少する可能性があると解釈できます。" ] } ], "metadata": { "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.16" } }, "nbformat": 4, "nbformat_minor": 5 }