From 5776d4031f9361e4c69fda6a22a7b77bd841093d Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Sat, 25 Apr 2026 15:58:59 +0100 Subject: [PATCH] Finishing part E --- Q1.ipynb | 1092 ++++++++++++++++++++++++++++-- data/googleplaystore_new_new.csv | 2 +- 2 files changed, 1042 insertions(+), 52 deletions(-) diff --git a/Q1.ipynb b/Q1.ipynb index 1dbf0fe..6d4510a 100644 --- a/Q1.ipynb +++ b/Q1.ipynb @@ -24,31 +24,33 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.486005100Z", - "start_time": "2026-04-25T13:28:40.480384400Z" + "end_time": "2026-04-25T14:53:58.236470700Z", + "start_time": "2026-04-25T14:53:58.228674500Z" } }, "cell_type": "code", "source": [ "import pandas as pd\n", - "import numpy as np" + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" ], "id": "edaea0c939a83b79", "outputs": [], - "execution_count": 70 + "execution_count": 371 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.502729500Z", - "start_time": "2026-04-25T13:28:40.488006Z" + "end_time": "2026-04-25T14:53:58.254179900Z", + "start_time": "2026-04-25T14:53:58.237468900Z" } }, "cell_type": "code", "source": "df = pd.read_csv('data/googleplaystore_new.csv')", "id": "e657e9baacc13e6b", "outputs": [], - "execution_count": 71 + "execution_count": 372 }, { "metadata": {}, @@ -59,8 +61,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.516572500Z", - "start_time": "2026-04-25T13:28:40.503729900Z" + "end_time": "2026-04-25T14:53:58.271506100Z", + "start_time": "2026-04-25T14:53:58.256180900Z" } }, "cell_type": "code", @@ -70,13 +72,13 @@ ], "id": "756c92821453bbb3", "outputs": [], - "execution_count": 72 + "execution_count": 373 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.537749600Z", - "start_time": "2026-04-25T13:28:40.517577900Z" + "end_time": "2026-04-25T14:53:58.305298200Z", + "start_time": "2026-04-25T14:53:58.272504Z" } }, "cell_type": "code", @@ -288,12 +290,12 @@ "" ] }, - "execution_count": 73, + "execution_count": 374, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 73 + "execution_count": 374 }, { "metadata": { @@ -309,8 +311,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.562150300Z", - "start_time": "2026-04-25T13:28:40.543751400Z" + "end_time": "2026-04-25T14:53:58.318866300Z", + "start_time": "2026-04-25T14:53:58.306302Z" } }, "cell_type": "code", @@ -326,26 +328,26 @@ ], "id": "c15cb7f9831e0f81", "outputs": [], - "execution_count": 74 + "execution_count": 375 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.568463900Z", - "start_time": "2026-04-25T13:28:40.563149700Z" + "end_time": "2026-04-25T14:53:58.334856400Z", + "start_time": "2026-04-25T14:53:58.320864Z" } }, "cell_type": "code", "source": "df['Size in bytes'] = df['Size'].apply(parse_size)", "id": "c76da70de24ddc72", "outputs": [], - "execution_count": 75 + "execution_count": 376 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:50.368129Z", - "start_time": "2026-04-25T13:28:50.352002600Z" + "end_time": "2026-04-25T14:53:58.352396100Z", + "start_time": "2026-04-25T14:53:58.335858Z" } }, "cell_type": "code", @@ -446,18 +448,18 @@ "" ] }, - "execution_count": 81, + "execution_count": 377, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 81 + "execution_count": 377 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.608697900Z", - "start_time": "2026-04-25T13:28:40.593237200Z" + "end_time": "2026-04-25T14:53:58.384474Z", + "start_time": "2026-04-25T14:53:58.367405200Z" } }, "cell_type": "code", @@ -472,13 +474,13 @@ ] } ], - "execution_count": 77 + "execution_count": 378 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.639521100Z", - "start_time": "2026-04-25T13:28:40.619210900Z" + "end_time": "2026-04-25T14:53:58.423348900Z", + "start_time": "2026-04-25T14:53:58.385473600Z" } }, "cell_type": "code", @@ -493,13 +495,13 @@ ] } ], - "execution_count": 78 + "execution_count": 379 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.656738800Z", - "start_time": "2026-04-25T13:28:40.641523100Z" + "end_time": "2026-04-25T14:53:58.445406400Z", + "start_time": "2026-04-25T14:53:58.423348900Z" } }, "cell_type": "code", @@ -514,13 +516,13 @@ ] } ], - "execution_count": 79 + "execution_count": 380 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:28:40.678521Z", - "start_time": "2026-04-25T13:28:40.656738800Z" + "end_time": "2026-04-25T14:53:58.464146900Z", + "start_time": "2026-04-25T14:53:58.446404300Z" } }, "cell_type": "code", @@ -755,12 +757,12 @@ "" ] }, - "execution_count": 80, + "execution_count": 381, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 80 + "execution_count": 381 }, { "metadata": { @@ -776,21 +778,21 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:29:54.733479400Z", - "start_time": "2026-04-25T13:29:54.718136700Z" + "end_time": "2026-04-25T14:53:58.503091400Z", + "start_time": "2026-04-25T14:53:58.483650900Z" } }, "cell_type": "code", - "source": "df['Numeric_installs'] = df['Installs'].str.replace('+', '').str.replace(',', '').astype(int)", + "source": "df['Numeric Installs'] = df['Installs'].str.replace('+', '').str.replace(',', '').astype(int)", "id": "c8d4f46526918c20", "outputs": [], - "execution_count": 82 + "execution_count": 382 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:30:07.364394100Z", - "start_time": "2026-04-25T13:30:07.347101500Z" + "end_time": "2026-04-25T14:53:58.525317500Z", + "start_time": "2026-04-25T14:53:58.504718Z" } }, "cell_type": "code", @@ -824,7 +826,7 @@ "8 100+ Free 0 Everyone Events 2.0 and up \n", "9 1,000,000+ Free 0 Everyone Finance 2.1 and up \n", "\n", - " Size in bytes Numeric_installs \n", + " Size in bytes Numeric Installs \n", "0 11264.0 1000000 \n", "1 22020096.0 1000000 \n", "2 41984.0 5000000 \n", @@ -867,7 +869,7 @@ " Genres\n", " Android Ver\n", " Size in bytes\n", - " Numeric_installs\n", + " Numeric Installs\n", " \n", " \n", " \n", @@ -1036,12 +1038,12 @@ "" ] }, - "execution_count": 83, + "execution_count": 383, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 83 + "execution_count": 383 }, { "metadata": {}, @@ -1052,15 +1054,15 @@ { "metadata": { "ExecuteTime": { - "end_time": "2026-04-25T13:35:48.441535100Z", - "start_time": "2026-04-25T13:35:48.421909700Z" + "end_time": "2026-04-25T14:53:58.573387900Z", + "start_time": "2026-04-25T14:53:58.546001500Z" } }, "cell_type": "code", "source": "df.to_csv('data/googleplaystore_new_new.csv', index=False)", "id": "5a99edb9f8b29b12", "outputs": [], - "execution_count": 88 + "execution_count": 384 }, { "metadata": {}, @@ -1068,13 +1070,1001 @@ "source": "# Part E", "id": "5372c799c0b2662" }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.580316100Z", + "start_time": "2026-04-25T14:53:58.575389500Z" + } + }, + "cell_type": "code", + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression, Ridge\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error" + ], + "id": "8cc741d5b19eaa62", + "outputs": [], + "execution_count": 385 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.591629700Z", + "start_time": "2026-04-25T14:53:58.583316400Z" + } + }, + "cell_type": "code", + "source": "df_new = pd.read_csv('data/googleplaystore_new_new.csv')", + "id": "bc158bb312aa3cd7", + "outputs": [], + "execution_count": 386 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.607120700Z", + "start_time": "2026-04-25T14:53:58.591629700Z" + } + }, + "cell_type": "code", + "source": [ + "columns_to_keep = ['Category', 'Reviews', 'Content Rating', 'Size in bytes', 'Numeric Installs', 'Rating']\n", + "df_min = df_new[columns_to_keep]" + ], + "id": "585677f9cc3efc16", + "outputs": [], + "execution_count": 387 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.628153200Z", + "start_time": "2026-04-25T14:53:58.608117200Z" + } + }, + "cell_type": "code", + "source": "df_min.head(20)", + "id": "76760facf2a6e8cb", + "outputs": [ + { + "data": { + "text/plain": [ + " Category Reviews Content Rating Size in bytes \\\n", + "0 LIBRARIES_AND_DEMO 20145 Everyone 11264.0 \n", + "1 BUSINESS 46353 Everyone 22020096.0 \n", + "2 LIBRARIES_AND_DEMO 58055 Everyone 41984.0 \n", + "3 LIBRARIES_AND_DEMO 7750 Everyone 299008.0 \n", + "4 EDUCATION 1619 Everyone 3145728.0 \n", + "5 LIBRARIES_AND_DEMO 26 Everyone 2621440.0 \n", + "6 BEAUTY 473 Mature 17+ 8598323.2 \n", + "7 COMMUNICATION 124346 Everyone 711680.0 \n", + "8 EVENTS 16 Everyone 2411724.8 \n", + "9 FINANCE 13868 Everyone 1468006.4 \n", + "10 COMMUNICATION 32254 Everyone 5767168.0 \n", + "11 COMMUNICATION 125232 Everyone 2831155.2 \n", + "12 EDUCATION 430 Everyone 538624.0 \n", + "13 EDUCATION 275 Everyone 2411724.8 \n", + "14 BOOKS_AND_REFERENCE 1778 Mature 17+ 5138022.4 \n", + "15 BUSINESS 2287 Everyone 1572864.0 \n", + "16 LIBRARIES_AND_DEMO 126862 Everyone 638976.0 \n", + "17 COMMUNICATION 255 Everyone 1677721.6 \n", + "18 LIFESTYLE 360 Everyone 4823449.6 \n", + "19 EDUCATION 656 Everyone 569344.0 \n", + "\n", + " Numeric Installs Rating \n", + "0 1000000 4.1 \n", + "1 1000000 4.3 \n", + "2 5000000 3.9 \n", + "3 1000000 3.8 \n", + "4 1000000 4.4 \n", + "5 1000 5.0 \n", + "6 100000 4.5 \n", + "7 10000000 4.2 \n", + "8 100 5.0 \n", + "9 1000000 4.1 \n", + "10 1000000 4.4 \n", + "11 10000000 4.2 \n", + "12 10000 4.0 \n", + "13 50000 4.0 \n", + "14 500000 3.9 \n", + "15 1000000 4.4 \n", + "16 10000000 3.5 \n", + "17 10000 4.1 \n", + "18 10000 4.1 \n", + "19 10000 4.3 " + ], + "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", + "
CategoryReviewsContent RatingSize in bytesNumeric InstallsRating
0LIBRARIES_AND_DEMO20145Everyone11264.010000004.1
1BUSINESS46353Everyone22020096.010000004.3
2LIBRARIES_AND_DEMO58055Everyone41984.050000003.9
3LIBRARIES_AND_DEMO7750Everyone299008.010000003.8
4EDUCATION1619Everyone3145728.010000004.4
5LIBRARIES_AND_DEMO26Everyone2621440.010005.0
6BEAUTY473Mature 17+8598323.21000004.5
7COMMUNICATION124346Everyone711680.0100000004.2
8EVENTS16Everyone2411724.81005.0
9FINANCE13868Everyone1468006.410000004.1
10COMMUNICATION32254Everyone5767168.010000004.4
11COMMUNICATION125232Everyone2831155.2100000004.2
12EDUCATION430Everyone538624.0100004.0
13EDUCATION275Everyone2411724.8500004.0
14BOOKS_AND_REFERENCE1778Mature 17+5138022.45000003.9
15BUSINESS2287Everyone1572864.010000004.4
16LIBRARIES_AND_DEMO126862Everyone638976.0100000003.5
17COMMUNICATION255Everyone1677721.6100004.1
18LIFESTYLE360Everyone4823449.6100004.1
19EDUCATION656Everyone569344.0100004.3
\n", + "
" + ] + }, + "execution_count": 388, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 388 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.644258400Z", + "start_time": "2026-04-25T14:53:58.629151300Z" + } + }, + "cell_type": "code", + "source": "df_encoded = pd.get_dummies(df_min, columns=['Category', 'Content Rating'])", + "id": "8c4742ab98b8b6ca", + "outputs": [], + "execution_count": 389 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.650381200Z", + "start_time": "2026-04-25T14:53:58.645767200Z" + } + }, + "cell_type": "code", + "source": [ + "X = df_encoded.drop('Rating', axis=1)\n", + "y = df_encoded['Rating']" + ], + "id": "7faed3f843076351", + "outputs": [], + "execution_count": 390 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.668155500Z", + "start_time": "2026-04-25T14:53:58.652896500Z" + } + }, + "cell_type": "code", + "source": "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101)", + "id": "8646df724923b0f5", + "outputs": [], + "execution_count": 391 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Trying Linear Regression", + "id": "e52a65f09530a141" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.677596300Z", + "start_time": "2026-04-25T14:53:58.670162100Z" + } + }, + "cell_type": "code", + "source": [ + "linear_model = LinearRegression()\n", + "linear_model.fit(X_train, y_train)\n", + "y_hat_linear = linear_model.predict(X_test)" + ], + "id": "db88942671bdf26a", + "outputs": [], + "execution_count": 392 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:57:40.714273700Z", + "start_time": "2026-04-25T14:57:40.674040700Z" + } + }, + "cell_type": "code", + "source": "X_test", + "id": "32a5d474cc8ed681", + "outputs": [ + { + "data": { + "text/plain": [ + " Reviews Size in bytes Numeric Installs Category_ART_AND_DESIGN \\\n", + "303 70782 52428800.0 1000000 False \n", + "805 132014 26214400.0 10000000 False \n", + "352 58 15728640.0 10000 False \n", + "952 1658 10171187.2 100000 False \n", + "514 10852 18874368.0 1000000 False \n", + "... ... ... ... ... \n", + "1096 120 10485760.0 500 False \n", + "551 27396 61865984.0 1000000 False \n", + "660 11506 15728640.0 100000 False \n", + "655 1015 11534336.0 100000 True \n", + "473 7976 46137344.0 500000 False \n", + "\n", + " Category_AUTO_AND_VEHICLES Category_BEAUTY \\\n", + "303 False False \n", + "805 False False \n", + "352 False False \n", + "952 False False \n", + "514 False False \n", + "... ... ... \n", + "1096 False False \n", + "551 False False \n", + "660 False False \n", + "655 False False \n", + "473 False False \n", + "\n", + " Category_BOOKS_AND_REFERENCE Category_BUSINESS Category_COMICS \\\n", + "303 False False False \n", + "805 False False False \n", + "352 False False False \n", + "952 False False False \n", + "514 False False False \n", + "... ... ... ... \n", + "1096 False False False \n", + "551 False False False \n", + "660 False False False \n", + "655 False False False \n", + "473 False False False \n", + "\n", + " Category_COMMUNICATION ... Category_GAME Category_HEALTH_AND_FITNESS \\\n", + "303 False ... False False \n", + "805 True ... False False \n", + "352 False ... False False \n", + "952 False ... False False \n", + "514 False ... False False \n", + "... ... ... ... ... \n", + "1096 False ... False False \n", + "551 False ... False True \n", + "660 False ... False True \n", + "655 False ... False False \n", + "473 False ... False True \n", + "\n", + " Category_HOUSE_AND_HOME Category_LIBRARIES_AND_DEMO \\\n", + "303 False False \n", + "805 False False \n", + "352 False True \n", + "952 False False \n", + "514 False False \n", + "... ... ... \n", + "1096 False False \n", + "551 False False \n", + "660 False False \n", + "655 False False \n", + "473 False False \n", + "\n", + " Category_LIFESTYLE Content Rating_Adults only 18+ \\\n", + "303 False False \n", + "805 False False \n", + "352 False False \n", + "952 True False \n", + "514 False False \n", + "... ... ... \n", + "1096 False False \n", + "551 False False \n", + "660 False False \n", + "655 False False \n", + "473 False False \n", + "\n", + " Content Rating_Everyone Content Rating_Everyone 10+ \\\n", + "303 True False \n", + "805 True False \n", + "352 True False \n", + "952 True False \n", + "514 True False \n", + "... ... ... \n", + "1096 False False \n", + "551 False False \n", + "660 True False \n", + "655 True False \n", + "473 True False \n", + "\n", + " Content Rating_Mature 17+ Content Rating_Teen \n", + "303 False False \n", + "805 False False \n", + "352 False False \n", + "952 False False \n", + "514 False False \n", + "... ... ... \n", + "1096 True False \n", + "551 True False \n", + "660 False False \n", + "655 False False \n", + "473 False False \n", + "\n", + "[333 rows x 26 columns]" + ], + "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", + "
ReviewsSize in bytesNumeric InstallsCategory_ART_AND_DESIGNCategory_AUTO_AND_VEHICLESCategory_BEAUTYCategory_BOOKS_AND_REFERENCECategory_BUSINESSCategory_COMICSCategory_COMMUNICATION...Category_GAMECategory_HEALTH_AND_FITNESSCategory_HOUSE_AND_HOMECategory_LIBRARIES_AND_DEMOCategory_LIFESTYLEContent Rating_Adults only 18+Content Rating_EveryoneContent Rating_Everyone 10+Content Rating_Mature 17+Content Rating_Teen
3037078252428800.01000000FalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseTrueFalseFalseFalse
80513201426214400.010000000FalseFalseFalseFalseFalseFalseTrue...FalseFalseFalseFalseFalseFalseTrueFalseFalseFalse
3525815728640.010000FalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseTrueFalseFalseTrueFalseFalseFalse
952165810171187.2100000FalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseTrueFalseTrueFalseFalseFalse
5141085218874368.01000000FalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseTrueFalseFalseFalse
..................................................................
109612010485760.0500FalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
5512739661865984.01000000FalseFalseFalseFalseFalseFalseFalse...FalseTrueFalseFalseFalseFalseFalseFalseTrueFalse
6601150615728640.0100000FalseFalseFalseFalseFalseFalseFalse...FalseTrueFalseFalseFalseFalseTrueFalseFalseFalse
655101511534336.0100000TrueFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseTrueFalseFalseFalse
473797646137344.0500000FalseFalseFalseFalseFalseFalseFalse...FalseTrueFalseFalseFalseFalseTrueFalseFalseFalse
\n", + "

333 rows × 26 columns

\n", + "
" + ] + }, + "execution_count": 401, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 401 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.695046Z", + "start_time": "2026-04-25T14:53:58.677596300Z" + } + }, + "cell_type": "code", + "source": [ + "print(f\"Mean absolute error = {mean_absolute_error(y_test, y_hat_linear)}\")\n", + "print(f\"Root mean squared error = {np.sqrt(mean_squared_error(y_test, y_hat_linear))}\")" + ], + "id": "12af54f4b3a1a88d", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean absolute error = 0.28061256731153783\n", + "Root mean squared error = 0.38671187333256235\n" + ] + } + ], + "execution_count": 393 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.773436200Z", + "start_time": "2026-04-25T14:53:58.696048500Z" + } + }, + "cell_type": "code", + "source": [ + "residual_error = y_test - y_hat_linear\n", + "\n", + "plt.figure(figsize=(8,5))\n", + "plt.scatter(y_test, residual_error, alpha=0.5)\n", + "plt.axhline(y=0, color='r', linestyle='--') # Adds a red line at 0 error for reference\n", + "plt.title(\"Residual Error Plot (Linear Regression)\")\n", + "plt.xlabel(\"True Rating Values (y)\")\n", + "plt.ylabel(\"Residual Error (y - y_hat)\")\n", + "plt.show()" + ], + "id": "8c3be82a8033d876", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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JYBHFWbEdQng0Gw0Si8CWV9cY7s3stFERNSDwS9KHebMmaPtzj799FNxOp26v7a2VtugERHFSmAJYCz1iyWA61vc4vH59BrbvbEEsCMkGx1Ob2SjiYioB4PfX//61/LII4/I448/Ljbb/o8h0eoMwTARUSwFlgCeOChb24tt3dOo11gCON5tzhI1G01ERMZ1OTWxbt06+cY3vtFhf3Z2ttTU1HT14YiI+tQSwIFsNHoMI/uMjhModUDGF4Fvb2SjiYioB4Pf4uJi2bhxY4e2Zqj3LS0t7erDERF1aQngRMpGowcxJr9V1LVoqQOy0Qh8452NJiKiHgx+L730UrnqqqvkySef1MkdO3fu1GWOf/rTn8rNN9/c1YcjIuqTEikbTUREPRj8zp8/X3w+n5xwwgnS1NSkJRApKSka/P74xz/u6sMREfVZiZSNJiIiY0z+9jM2DHK5XFr+0NDQIOPHj9dlj7G8MbpA9Cd1dXVaz4xuFllZWb19OERERER0APFat/r8gt1u16D3yCOP1K4P99xzj4wYMaK7D0dERERE1OMMB7/o53vjjTfK4YcfrotbvPTSS7p/0aJFGvTee++9cs011/TksRIRERERxafm95ZbbpFHH31UZs2aJe+//76cddZZcuGFF8oHH3ygWV9sWyyWAzsaIiIiIqJECH5feOEFeeaZZ+T000+XVatWyeTJk8Xj8cjnn3+uXR+IiIiIiPpN2cP27dtlypQp+v+JEydqhweUOTDwJSIiIqJ+F/x6vV6d5BZgtVq1wwMRERERUb8re0BHtHnz5mnGF1paWuSyyy4Th8PRZtw///nP2B8lEREREVE8g9+5c+e22T7//PNj8fxERERERIkX/KKlGRERERFRX9btRS6IiIiIiPoaBr9ERERElDQY/BIRERFR0mDwS0RERERJg8EvERERESUNBr9ERERElDQY/BIRERFR0mDwS0RERERJg8EvERERESUNBr9ERERElDQY/BIRERFR0mDwS0RERERJg8EvERERESUNBr9ERERElDQY/BIRERFR0mDwS0RERERJo88Ev7fffrtMnz5d0tPTJScnx9B95s2bJyaTqc3lpJNO6vFjJSIiIqLEZJU+wuVyyVlnnSXTpk2TP/7xj4bvh2B30aJFwe2UlJQeOkIiIiIiSnR9JvhdsGCBXj/11FNduh+C3eLi4h46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" + }, + "metadata": {}, + "output_type": "display_data", + "jetTransient": { + "display_id": null + } + } + ], + "execution_count": 394 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Trying Polynomial Regression", + "id": "28a6926de3a1a2e7" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.782476500Z", + "start_time": "2026-04-25T14:53:58.774436300Z" + } + }, + "cell_type": "code", + "source": [ + "poly_converter = PolynomialFeatures(degree=2)\n", + "X_poly = poly_converter.fit_transform(X)" + ], + "id": "b867289f4b8dd0ae", + "outputs": [], + "execution_count": 395 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.787833400Z", + "start_time": "2026-04-25T14:53:58.782476500Z" + } + }, + "cell_type": "code", + "source": "X_train_p, X_test_p, y_train_p, y_test_p = train_test_split(X_poly, y, test_size=0.3, random_state=101)", + "id": "cf11946087afa62f", + "outputs": [], + "execution_count": 396 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.819419400Z", + "start_time": "2026-04-25T14:53:58.788835500Z" + } + }, + "cell_type": "code", + "source": [ + "poly_model = LinearRegression()\n", + "poly_model.fit(X_train_p, y_train_p)\n", + "y_hat_poly = poly_model.predict(X_test_p)" + ], + "id": "61b135564e36f71d", + "outputs": [], + "execution_count": 397 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.835519700Z", + "start_time": "2026-04-25T14:53:58.820414Z" + } + }, + "cell_type": "code", + "source": [ + "print(f\"Mean absolute error = {mean_absolute_error(y_test_p, y_hat_poly)}\")\n", + "print(f\"Root mean squared error = {np.sqrt(mean_squared_error(y_test_p, y_hat_poly))}\")\n" + ], + "id": "bfd534c1abda8530", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean absolute error = 0.29501714163585174\n", + "Root mean squared error = 0.4157783198958284\n" + ] + } + ], + "execution_count": 398 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-04-25T14:53:58.840547200Z", + "start_time": "2026-04-25T14:53:58.836521600Z" + } + }, + "cell_type": "markdown", + "source": [ + "### Model Performance Results:\n", + "\n", + "Linear Regression: `MAE = 0.2806 | RMSE = 0.3867`\n", + "\n", + "Polynomial Regression: `MAE = 0.2950 | RMSE = 0.4158`\n", + "\n", + "This shows that the Linear Regression model performed better than the Polynomial Regression model in terms of both MAE and RMSE, indicating that the linear model is a better fit for this dataset. The residual error plot for the linear model also suggests that there are no clear patterns in the residuals, which is a good sign for the model's performance. This means that for this particular case, handling the rating predictions with a linear regression model would be better due to its lower error rate as compared to the polynomial regression model.\n" + ], + "id": "eaefa3aed2214793" + }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", - "id": "8cc741d5b19eaa62" + "id": "8e3d435421cb39d" } ], "metadata": { diff --git a/data/googleplaystore_new_new.csv b/data/googleplaystore_new_new.csv index fd755b2..fc8cd2b 100644 --- a/data/googleplaystore_new_new.csv +++ b/data/googleplaystore_new_new.csv @@ -1,4 +1,4 @@ -App,Category,Rating,Reviews,Size,Installs,Type,Price,Content Rating,Genres,Android Ver,Size in bytes,Numeric_installs +App,Category,Rating,Reviews,Size,Installs,Type,Price,Content Rating,Genres,Android Ver,Size in bytes,Numeric Installs Market Update Helper,LIBRARIES_AND_DEMO,4.1,20145,11k,"1,000,000+",Free,0,Everyone,Libraries & Demo,1.5 and up,11264.0,1000000 SuperLivePro,BUSINESS,4.3,46353,21M,"1,000,000+",Free,0,Everyone,Business,1.5 and up,22020096.0,1000000 Wifi Connect Library,LIBRARIES_AND_DEMO,3.9,58055,41k,"5,000,000+",Free,0,Everyone,Libraries & Demo,1.5 and up,41984.0,5000000