{ "cells": [ { "cell_type": "code", "execution_count": 196, "id": "d03c0654", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python 3.12.1\n" ] } ], "source": [ "!python -V" ] }, { "cell_type": "markdown", "id": "8c0c3eac", "metadata": {}, "source": [ "## Install packages.\n", "With uv + vscode, there are two options (I went with first).\n", "1. Add them to the project, cli: `uv add pandas` or jupyter: `!uv add pandas`\n", "2. Install them, bypassing `pyproject.toml`. Jupyter: `!uv pip install pandas`\n", "\n", "More in README.MD" ] }, { "cell_type": "code", "execution_count": 197, "id": "350c4ced", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import pickle\n", "from sklearn.feature_extraction import DictVectorizer\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.linear_model import Lasso\n", "from sklearn.linear_model import Ridge\n", "from sklearn.metrics import root_mean_squared_error # , mean_squared_error be" ] }, { "cell_type": "code", "execution_count": null, "id": "63d916e8", "metadata": {}, "outputs": [], "source": [ "df = pd.read_parquet(\"../data/green_tripdata_2021-01.parquet\")" ] }, { "cell_type": "code", "execution_count": 199, "id": "127f1b09", "metadata": {}, "outputs": [], "source": [ "df.lpep_dropoff_datetime = pd.to_datetime(df.lpep_dropoff_datetime)\n", "df.lpep_pickup_datetime = pd.to_datetime(df.lpep_pickup_datetime)" ] }, { "cell_type": "code", "execution_count": 200, "id": "73a983eb", "metadata": {}, "outputs": [], "source": [ "# get travel duration time, delta\n", "df[\"duration\"] = df.lpep_dropoff_datetime - df.lpep_pickup_datetime\n", "# for each element in duration (td) apply {math}\n", "df.duration = df.duration.apply(lambda td: td.total_seconds() / 60)" ] }, { "cell_type": "code", "execution_count": 201, "id": "f3c01972", "metadata": {}, "outputs": [], "source": [ "# https://www.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_green.pdf\n", "# df = df[df.trip_type == 2] # unrequred" ] }, { "cell_type": "code", "execution_count": 202, "id": "2da00479", "metadata": {}, "outputs": [], "source": [ "# Slght deviation from the lecture, we should do filtering before plotting in this case\n", "df = df[((df.duration >= 1) & (df.duration <= 60))]" ] }, { "cell_type": "code", "execution_count": 203, "id": "a613991b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# dictplot is deprecated, general alternative is displot.\n", "\n", "# Kernel density estimation (KDE) is enabled (smoothing of the graph)\n", "# Density: how likely values to occur within a certain range (regions of data).\n", "# Density is normalized, so you can compare distribution, unlike frequencies or counts.\n", "\n", "# .set part is unnecessary, sometimes helps with readability\n", "sns.displot(df.duration, kde=True, stat=\"density\") # .set(xlim=(0, 100),ylim=(0, 0.06))" ] }, { "cell_type": "code", "execution_count": 204, "id": "b3f22cbc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 73908.000000\n", "mean 16.852578\n", "std 11.563163\n", "min 1.000000\n", "50% 14.000000\n", "95% 41.000000\n", "98% 48.781000\n", "99% 53.000000\n", "max 60.000000\n", "Name: duration, dtype: float64" ] }, "execution_count": 204, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Checking percentile to see below which values most of our rides are\n", "df.duration.describe(percentiles=[0.95, 0.98, 0.99])" ] }, { "cell_type": "code", "execution_count": null, "id": "d6de5cba", "metadata": {}, "outputs": [], "source": [ "categorical = [\"PULocationID\", \"DOLocationID\"]\n", "numerical = [\"trip_distance\"]" ] }, { "cell_type": "code", "execution_count": 206, "id": "6e3bc33e", "metadata": {}, "outputs": [], "source": [ "df[categorical] = df[categorical].astype(str)" ] }, { "cell_type": "code", "execution_count": null, "id": "bb7bed9f", "metadata": {}, "outputs": [], "source": [ "train_dict = df[categorical + numerical].to_dict(orient=\"records\")" ] }, { "cell_type": "markdown", "id": "7fc5c394", "metadata": {}, "source": [ "Notes:\n", "## One-hot encoding\n", "\n", "> Is a technique to convert categorical variables (like strings or IDs) into a format that can be provided to machine learning algorithms.\n", "\n", "### How it works:\n", "- For each unique value in a categorical column, a new column is created.\n", "- In each row, the column corresponding to the value is set to 1, and all others are set to 0.\n", "\n", "#### Example\n", "\n", "Before:\n", "| Color |\n", "|-------|\n", "| Red |\n", "| Blue |\n", "| Green |\n", "\n", "After one-hot:\n", "\n", "| Color=Red | Color=Green | Color=Blue |\n", "|-----------|-------------|------------|\n", "| 1 | 0 | 0 |\n", "| 0 | 0 | 1 |\n", "| 0 | 1 | 0 |\n", "\n", "So, categorical data is represented numerically, ergo usable for most machine learning models.\n", "\n", "## Matrix \n", "In this case each value of DOLocationID, PULocationID becomes a \"column\" which shows 0 or 1, each row is a ride. `trip_distance` remains unchanged,\n", "\n", "After `DictVectorizer`, matrix will look like this:\n", "\n", "| PULocationID=10 | PULocationID=15 | DOLocationID=20 | DOLocationID=30 | trip_distance |\n", "|-----------------|-----------------|-----------------|-----------------|--------------|\n", "| 1 | 0 | 1 | 0 | 2.5 |\n", "| 0 | 1 | 0 | 1 | 1.2 |\n", "| 1 | 0 | 0 | 1 | 3.8 |\n", "\n", "Final matrix has as many columns as there are unique categorical values (from both columns) plus one column for each numerical feature." ] }, { "cell_type": "code", "execution_count": 208, "id": "3739e6e9", "metadata": {}, "outputs": [], "source": [ "dv = DictVectorizer()\n", "X_train = dv.fit_transform(train_dict)" ] }, { "cell_type": "code", "execution_count": 209, "id": "833c52eb", "metadata": {}, "outputs": [], "source": [ "# converting col into numpy array.\n", "# making it a target for learning.\n", "target = \"duration\"\n", "y_train = df[target].values" ] }, { "cell_type": "code", "execution_count": 210, "id": "ea5dd27c", "metadata": {}, "outputs": [], "source": [ "lr = LinearRegression()\n", "lr.fit(X_train, y_train) # makes it learn\n", "y_pred = lr.predict(\n", " X_train\n", ") # we can predict on \"any\" data we give, y is not asked, because it asumes it from .fit" ] }, { "cell_type": "code", "execution_count": 211, "id": "d7427748", "metadata": {}, "outputs": [ { "data": { "image/png": "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22+54oorSEhIQFEUz9ptLVRV5amnniI+Ph6r1cqsWbM4cOCAb4L1A4sWLWLq1KkEBwcTExPD3LlzycrKarVPU1MTd999N5GRkQQFBXHttdeeNElof/LGG28wbtw4z+RqM2bM4L///a/neblfp7d48WLPNCIt5J4d99vf/hZFUVo9Ro4c6Xle7lXbjh07xv/8z/8QGRmJ1Wpl7NixbN9+fAE3X773SwLkJR999BELFizg6aefJj09nfHjxzN79mxKSkp8HZpfqK+vZ/z48bz++uttPv/HP/6RV155hTfffJMtW7YQGBjI7NmzaWpqanP/vm79+vXcfffdbN68mdWrV+NwOPjxj39MfX29Z58HHniAzz//nBUrVrB+/XoKCgq45pprfBi1bw0cOJDFixeTlpbG9u3bueiii7jqqqvYu3cvIPfrdLZt28af//xnxo0b12q73LPWRo8eTWFhoefx/fffe56Te3WyyspKzjnnHIxGI//973/Zt28fS5YsITw83LOPT9/7z7hamGiXadOmqXfffbfnZ5fLpSYkJKiLFi3yYVT+CVA//fRTz89ut1uNi4tTn3/+ec+2qqoq1Ww2qx9++KEPIvQ/JSUlKqCuX79eVVXt/hiNRnXFihWefTIzM1VA3bRpk6/C9Dvh4eHqX//6V7lfp1FbW6umpKSoq1evVmfOnKned999qqrK79gPPf300+r48ePbfE7uVdseffRR9dxzzz3l875+75cWIC+w2+2kpaUxa9YszzadTsesWbPYtGmTDyPrHY4cOUJRUVGr+xcaGsr06dPl/jWrrq4GICIiAoC0tDQcDkerezZy5EgGDRok9wxwuVwsX76c+vp6ZsyYIffrNO6++24uu+yyVvcG5HesLQcOHCAhIYEhQ4Zw4403kpeXB8i9OpXPPvuMKVOmcN111xETE8PEiRP5y1/+4nne1+/9kgB5QVlZGS6XyzN7dYvY2FiKiop8FFXv0XKP5P61ze12c//993POOed4ZjwvKirCZDKdtGhvf79nGRkZBAUFYTabueuuu/j0008ZNWqU3K9TWL58Oenp6Z6lhk4k96y16dOns3TpUlatWsUbb7zBkSNHOO+886itrZV7dQqHDx/mjTfeICUlhS+//JJf/vKX3Hvvvbz77ruA79/7fb4UhhDi9O6++2727NnTqt5AtG3EiBHs3LmT6upqPv74Y26++WbWr1/v67D8Un5+Pvfddx+rV6/ukWWCertLLrnE8/24ceOYPn06gwcP5h//+AdWq9WHkfkvt9vNlClT+MMf/gDAxIkT2bNnD2+++SY333yzj6OTFiCviIqKQq/Xn1TxX1xcTFxcnI+i6j1a7pHcv5Pdc889/Pvf/2bt2rUMHDjQsz0uLg673U5VVVWr/fv7PTOZTAwbNozJkyezaNEixo8fz8svvyz3qw1paWmUlJQwadIkDAYDBoOB9evX88orr2AwGIiNjZV7dhphYWEMHz6cgwcPyu/XKcTHxzNq1KhW21JTUz1dh75+75cEyAtMJhOTJ09mzZo1nm1ut5s1a9YwY8YMH0bWOyQnJxMXF9fq/tXU1LBly5Z+e/9UVeWee+7h008/5ZtvviE5ObnV85MnT8ZoNLa6Z1lZWeTl5fXbe9YWt9uNzWaT+9WGiy++mIyMDHbu3Ol5TJkyhRtvvNHzvdyzU6urq+PQoUPEx8fL79cpnHPOOSdN35Gdnc3gwYMBP3jv7/Yy635i+fLlqtlsVpcuXaru27dPvfPOO9WwsDC1qKjI16H5hdraWnXHjh3qjh07VEB94YUX1B07dqi5ubmqqqrq4sWL1bCwMPVf//qXunv3bvWqq65Sk5OT1cbGRh9H7hu//OUv1dDQUHXdunVqYWGh59HQ0ODZ56677lIHDRqkfvPNN+r27dvVGTNmqDNmzPBh1L61cOFCdf369eqRI0fU3bt3qwsXLlQVRVG/+uorVVXlfrXHiaPAVFXu2YkefPBBdd26deqRI0fUDRs2qLNmzVKjoqLUkpISVVXlXrVl69atqsFgUH//+9+rBw4cUD/44AM1ICBAff/99z37+PK9XxIgL3r11VfVQYMGqSaTSZ02bZq6efNmX4fkN9auXasCJz1uvvlmVVW14ZBPPvmkGhsbq5rNZvXiiy9Ws7KyfBu0D7V1rwD1nXfe8ezT2Nio/upXv1LDw8PVgIAA9eqrr1YLCwt9F7SP/fznP1cHDx6smkwmNTo6Wr344os9yY+qyv1qjx8mQHLPjps3b54aHx+vmkwmdcCAAeq8efPUgwcPep6Xe9W2zz//XB0zZoxqNpvVkSNHqm+99Var53353q+oqqp2fzuTEEIIIYT/kBogIYQQQvQ7kgAJIYQQot+RBEgIIYQQ/Y4kQEIIIYTodyQBEkIIIUS/IwmQEEIIIfodSYCEEEII0e9IAiSEEEKIfkcSICGEEEL0O5IACSGEEKLfkQRICCGEEP2OJEBCCCGE6Hf+H/m+xmYsYnE7AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# dictplot is deprecated, for overlapping plots I found there are\n", "# two alternatives: histplot and kdeplot. Kdeplot looks more informative\n", "\n", "sns.histplot(\n", " y_pred, kde=True, stat=\"density\", label=\"prediction\", color=\"C0\", alpha=0.5\n", ")\n", "sns.histplot(y_train, kde=True, stat=\"density\", label=\"actual\", color=\"C1\", alpha=0.5)\n", "plt.legend() # render legend labels\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 212, "id": "fb756bab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.838799799829626" ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# About using root_mean..., it's same as using mean_squared_error(squared=false)\n", "\n", "# calc the wellness of prediction via comparison of train vs pred via formula (y_true - y_pred) ** 2\n", "root_mean_squared_error(y_train, y_pred)\n", "# Thought model is bad, prediction is off by 9 minutes on average" ] }, { "cell_type": "code", "execution_count": 213, "id": "b73bcc72", "metadata": {}, "outputs": [], "source": [ "# refactor for function approach\n", "def read_dataframe(filename):\n", " if filename.endswith(\".csv\"):\n", " df = pd.read_csv(filename)\n", "\n", " df.lpep_dropoff_datetime = pd.to_datetime(df.lpep_dropoff_datetime)\n", " df.lpep_pickup_datetime = pd.to_datetime(df.lpep_pickup_datetime)\n", " elif filename.endswith(\".parquet\"):\n", " df = pd.read_parquet(filename)\n", "\n", " df[\"duration\"] = df.lpep_dropoff_datetime - df.lpep_pickup_datetime\n", " df.duration = df.duration.apply(lambda td: td.total_seconds() / 60)\n", "\n", " df = df[(df.duration >= 1) & (df.duration <= 60)]\n", "\n", " categorical = [\"PULocationID\", \"DOLocationID\"]\n", " df[categorical] = df[categorical].astype(str)\n", "\n", " return df" ] }, { "cell_type": "code", "execution_count": null, "id": "a7312bdf", "metadata": {}, "outputs": [], "source": [ "df_train = read_dataframe(\"../data/green_tripdata_2021-01.parquet\")\n", "df_val = read_dataframe(\"../data/green_tripdata_2021-02.parquet\")" ] }, { "cell_type": "code", "execution_count": 215, "id": "9689b41f", "metadata": {}, "outputs": [], "source": [ "# This way model treat combined PU/DO as unique identifier\n", "# I guess it helps the model to learn on specific patterns of PU/DO combination\n", "df_train[\"PU_DO\"] = df_train[\"PULocationID\"] + \"_\" + df_train[\"DOLocationID\"]\n", "df_val[\"PU_DO\"] = df_val[\"PULocationID\"] + \"_\" + df_val[\"DOLocationID\"]" ] }, { "cell_type": "markdown", "id": "a401cf22", "metadata": {}, "source": [ "training - january\n", "validation - february" ] }, { "cell_type": "code", "execution_count": 216, "id": "eb71cd89", "metadata": {}, "outputs": [], "source": [ "categorical = [\"PU_DO\"] # combined 'PULocationID', 'DOLocationID'\n", "numerical = [\"trip_distance\"]\n", "\n", "dv = DictVectorizer()\n", "\n", "train_dicts = df_train[categorical + numerical].to_dict(orient=\"records\")\n", "X_train = dv.fit_transform(train_dicts)\n", "\n", "val_dicts = df_val[categorical + numerical].to_dict(orient=\"records\")\n", "X_val = dv.transform(val_dicts)" ] }, { "cell_type": "code", "execution_count": 217, "id": "7c3359b2", "metadata": {}, "outputs": [], "source": [ "target = \"duration\"\n", "y_train = df_train[target].values\n", "y_val = df_val[target].values" ] }, { "cell_type": "code", "execution_count": 218, "id": "2ed32658", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7.758715209092169" ] }, "execution_count": 218, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LinearRegression()\n", "lr.fit(X_train, y_train)\n", "\n", "y_pred = lr.predict(X_val)\n", "\n", "root_mean_squared_error(y_val, y_pred)" ] }, { "cell_type": "code", "execution_count": 219, "id": "107f8ea3", "metadata": {}, "outputs": [], "source": [ "# exporting the model\n", "with open(\"../models/lin_reg.bin\", \"wb\") as f_out:\n", " pickle.dump((dv, lr), f_out)" ] }, { "cell_type": "code", "execution_count": 220, "id": "7d39c7a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7.616617770546549" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = Lasso(alpha=0.0001) # Alpha uses the math concept of regularization\n", "lr.fit(X_train, y_train)\n", "\n", "y_pred = lr.predict(X_val)\n", "\n", "root_mean_squared_error(y_val, y_pred)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }