{ "cells": [ { "cell_type": "markdown", "id": "7e9c6393-e58e-4713-b9ef-ff4c697ca7d3", "metadata": {}, "source": [ "# Brand Choice Modelling" ] }, { "cell_type": "markdown", "id": "ab95d58a-ea0b-42b7-9a20-89614b5d1f8f", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": null, "id": "516a0b9d-f0e4-4a86-b666-ab90fca14c5a", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import scipy as sp\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt \n", "import sklearn\n", "import numpy as np\n", "import pickle\n", "import joblib\n", "import itertools\n", "from sklearn.linear_model import LogisticRegression" ] }, { "cell_type": "code", "execution_count": null, "id": "e55ce4e3-ae20-4dad-82f4-56b26b941eba", "metadata": {}, "outputs": [], "source": [ "sns.set()" ] }, { "cell_type": "markdown", "id": "5950ae0d-0626-45e4-9696-a8f008d3218a", "metadata": {}, "source": [ "## Read and Prepare Dataset" ] }, { "cell_type": "code", "execution_count": null, "id": "c8ba0e75-4299-4754-b359-d04ada9b7dbc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>ID</th>\n", " <th>Day</th>\n", " <th>Incidence</th>\n", " <th>Brand</th>\n", " <th>Quantity</th>\n", " <th>Last_Inc_Brand</th>\n", " <th>Last_Inc_Quantity</th>\n", " <th>Price_1</th>\n", " <th>Price_2</th>\n", " <th>Price_3</th>\n", " <th>...</th>\n", " <th>Promotion_3</th>\n", " <th>Promotion_4</th>\n", " <th>Promotion_5</th>\n", " <th>Sex</th>\n", " <th>Marital status</th>\n", " <th>Age</th>\n", " <th>Education</th>\n", " <th>Income</th>\n", " <th>Occupation</th>\n", " <th>Settlement size</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>200000001</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1.59</td>\n", " <td>1.87</td>\n", " <td>2.01</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>47</td>\n", " <td>1</td>\n", " <td>110866</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>200000001</td>\n", " <td>11</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1.51</td>\n", " <td>1.89</td>\n", " <td>1.99</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>47</td>\n", " <td>1</td>\n", " <td>110866</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>200000001</td>\n", " <td>12</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1.51</td>\n", " <td>1.89</td>\n", " <td>1.99</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>47</td>\n", " <td>1</td>\n", " <td>110866</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>200000001</td>\n", " <td>16</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1.52</td>\n", " <td>1.89</td>\n", " <td>1.98</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>47</td>\n", " <td>1</td>\n", " <td>110866</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>200000001</td>\n", " <td>18</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1.52</td>\n", " <td>1.89</td>\n", " <td>1.99</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>47</td>\n", " <td>1</td>\n", " <td>110866</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 24 columns</p>\n", "</div>" ], "text/plain": [ " ID Day Incidence Brand Quantity Last_Inc_Brand \\\n", "0 200000001 1 0 0 0 0 \n", "1 200000001 11 0 0 0 0 \n", "2 200000001 12 0 0 0 0 \n", "3 200000001 16 0 0 0 0 \n", "4 200000001 18 0 0 0 0 \n", "\n", " Last_Inc_Quantity Price_1 Price_2 Price_3 ... Promotion_3 \\\n", "0 0 1.59 1.87 2.01 ... 0 \n", "1 0 1.51 1.89 1.99 ... 0 \n", "2 0 1.51 1.89 1.99 ... 0 \n", "3 0 1.52 1.89 1.98 ... 0 \n", "4 0 1.52 1.89 1.99 ... 0 \n", "\n", " Promotion_4 Promotion_5 Sex Marital status Age Education Income \\\n", "0 0 0 0 0 47 1 110866 \n", "1 0 0 0 0 47 1 110866 \n", "2 0 0 0 0 47 1 110866 \n", "3 0 0 0 0 47 1 110866 \n", "4 0 0 0 0 47 1 110866 \n", "\n", " Occupation Settlement size \n", "0 1 0 \n", "1 1 0 \n", "2 1 0 \n", "3 1 0 \n", "4 1 0 \n", "\n", "[5 rows x 24 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"purchase data.csv\"); df.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "31812a50-7a8f-4e9c-b9d9-44b03bcf1259", "metadata": {}, "outputs": [], "source": [ "def do_clustering(df, pipeline, drop_cols=None, sel_cols=None, do_fit=False):\n", " y = None\n", " df_new = df.copy()\n", " if drop_cols: df_new = df_new.drop(columns=drop_cols, axis=1)\n", " df_filter = df_new.copy() \n", " if sel_cols: df_filter = df_new[sel_cols]\n", " if do_fit:y = pipeline.fit_predict(df_filter)\n", " else: y = pipeline.predict(df_filter)\n", " if 'pca' in pipeline.named_steps:\n", " m = pipeline.named_steps['pca']\n", " comp_names = [f\"PCA{i+1}\" for i in range(m.n_components)]\n", " transform_df = df_filter.copy()\n", " for step in pipeline.named_steps:\n", " transform_df = pipeline.named_steps[step].transform(transform_df)\n", " if step == \"pca\": break\n", " pca_df = pd.DataFrame(transform_df, \n", " columns=comp_names, \n", " index=df_filter.index)\n", " df_new = pd.concat([df_new, pca_df], axis=1)\n", " df_new['y'] = y+1\n", " return df_new, pipeline" ] }, { "cell_type": "code", "execution_count": null, "id": "a1d6712e-9ec6-404b-90d1-b362a97365e1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>0</th>\n", " <th>1</th>\n", " <th>2</th>\n", " <th>3</th>\n", " <th>4</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>ID</th>\n", " <td>200000001</td>\n", " <td>200000001</td>\n", " <td>200000001</td>\n", " <td>200000001</td>\n", " <td>200000001</td>\n", " </tr>\n", " <tr>\n", " <th>Day</th>\n", " <td>1</td>\n", " <td>11</td>\n", " <td>12</td>\n", " <td>16</td>\n", " <td>18</td>\n", " </tr>\n", " <tr>\n", " <th>Incidence</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Brand</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Quantity</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Last_Inc_Brand</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Last_Inc_Quantity</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Price_1</th>\n", " <td>1.59</td>\n", " <td>1.51</td>\n", " <td>1.51</td>\n", " <td>1.52</td>\n", " <td>1.52</td>\n", " </tr>\n", " <tr>\n", " <th>Price_2</th>\n", " <td>1.87</td>\n", " <td>1.89</td>\n", " <td>1.89</td>\n", " <td>1.89</td>\n", " <td>1.89</td>\n", " </tr>\n", " <tr>\n", " <th>Price_3</th>\n", " <td>2.01</td>\n", " <td>1.99</td>\n", " <td>1.99</td>\n", " <td>1.98</td>\n", " <td>1.99</td>\n", " </tr>\n", " <tr>\n", " <th>Price_4</th>\n", " <td>2.09</td>\n", " <td>2.09</td>\n", " <td>2.09</td>\n", " <td>2.09</td>\n", " <td>2.09</td>\n", " </tr>\n", " <tr>\n", " <th>Price_5</th>\n", " <td>2.66</td>\n", " <td>2.66</td>\n", " <td>2.66</td>\n", " <td>2.66</td>\n", " <td>2.66</td>\n", " </tr>\n", " <tr>\n", " <th>Promotion_1</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Promotion_2</th>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Promotion_3</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Promotion_4</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Promotion_5</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Sex</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Marital status</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>Age</th>\n", " <td>47</td>\n", " <td>47</td>\n", " <td>47</td>\n", " <td>47</td>\n", " <td>47</td>\n", " </tr>\n", " <tr>\n", " <th>Education</th>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>Income</th>\n", " <td>110866</td>\n", " <td>110866</td>\n", " <td>110866</td>\n", " <td>110866</td>\n", " <td>110866</td>\n", " </tr>\n", " <tr>\n", " <th>Occupation</th>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>Settlement size</th>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>PCA1</th>\n", " <td>0.362152</td>\n", " <td>0.362152</td>\n", " <td>0.362152</td>\n", " <td>0.362152</td>\n", " <td>0.362152</td>\n", " </tr>\n", " <tr>\n", " <th>PCA2</th>\n", " <td>-0.639557</td>\n", " <td>-0.639557</td>\n", " <td>-0.639557</td>\n", " <td>-0.639557</td>\n", " <td>-0.639557</td>\n", " </tr>\n", " <tr>\n", " <th>PCA3</th>\n", " <td>1.462706</td>\n", " <td>1.462706</td>\n", " <td>1.462706</td>\n", " <td>1.462706</td>\n", " <td>1.462706</td>\n", " </tr>\n", " <tr>\n", " <th>PCA4</th>\n", " <td>-0.593242</td>\n", " <td>-0.593242</td>\n", " <td>-0.593242</td>\n", " <td>-0.593242</td>\n", " <td>-0.593242</td>\n", " </tr>\n", " <tr>\n", " <th>y</th>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " <td>3</td>\n", " </tr>\n", " <tr>\n", " <th>labels</th>\n", " <td>Fewer-Opportunities</td>\n", " <td>Fewer-Opportunities</td>\n", " <td>Fewer-Opportunities</td>\n", " <td>Fewer-Opportunities</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " 0 1 \\\n", "ID 200000001 200000001 \n", "Day 1 11 \n", "Incidence 0 0 \n", "Brand 0 0 \n", "Quantity 0 0 \n", "Last_Inc_Brand 0 0 \n", "Last_Inc_Quantity 0 0 \n", "Price_1 1.59 1.51 \n", "Price_2 1.87 1.89 \n", "Price_3 2.01 1.99 \n", "Price_4 2.09 2.09 \n", "Price_5 2.66 2.66 \n", "Promotion_1 0 0 \n", "Promotion_2 1 0 \n", "Promotion_3 0 0 \n", "Promotion_4 0 0 \n", "Promotion_5 0 0 \n", "Sex 0 0 \n", "Marital status 0 0 \n", "Age 47 47 \n", "Education 1 1 \n", "Income 110866 110866 \n", "Occupation 1 1 \n", "Settlement size 0 0 \n", "PCA1 0.362152 0.362152 \n", "PCA2 -0.639557 -0.639557 \n", "PCA3 1.462706 1.462706 \n", "PCA4 -0.593242 -0.593242 \n", "y 3 3 \n", "labels Fewer-Opportunities Fewer-Opportunities \n", "\n", " 2 3 \\\n", "ID 200000001 200000001 \n", "Day 12 16 \n", "Incidence 0 0 \n", "Brand 0 0 \n", "Quantity 0 0 \n", "Last_Inc_Brand 0 0 \n", "Last_Inc_Quantity 0 0 \n", "Price_1 1.51 1.52 \n", "Price_2 1.89 1.89 \n", "Price_3 1.99 1.98 \n", "Price_4 2.09 2.09 \n", "Price_5 2.66 2.66 \n", "Promotion_1 0 0 \n", "Promotion_2 0 0 \n", "Promotion_3 0 0 \n", "Promotion_4 0 0 \n", "Promotion_5 0 0 \n", "Sex 0 0 \n", "Marital status 0 0 \n", "Age 47 47 \n", "Education 1 1 \n", "Income 110866 110866 \n", "Occupation 1 1 \n", "Settlement size 0 0 \n", "PCA1 0.362152 0.362152 \n", "PCA2 -0.639557 -0.639557 \n", "PCA3 1.462706 1.462706 \n", "PCA4 -0.593242 -0.593242 \n", "y 3 3 \n", "labels Fewer-Opportunities Fewer-Opportunities \n", "\n", " 4 \n", "ID 200000001 \n", "Day 18 \n", "Incidence 0 \n", "Brand 0 \n", "Quantity 0 \n", "Last_Inc_Brand 0 \n", "Last_Inc_Quantity 0 \n", "Price_1 1.52 \n", "Price_2 1.89 \n", "Price_3 1.99 \n", "Price_4 2.09 \n", "Price_5 2.66 \n", "Promotion_1 0 \n", "Promotion_2 0 \n", "Promotion_3 0 \n", "Promotion_4 0 \n", "Promotion_5 0 \n", "Sex 0 \n", "Marital status 0 \n", "Age 47 \n", "Education 1 \n", "Income 110866 \n", "Occupation 1 \n", "Settlement size 0 \n", "PCA1 0.362152 \n", "PCA2 -0.639557 \n", "PCA3 1.462706 \n", "PCA4 -0.593242 \n", "y 3 \n", "labels Fewer-Opportunities " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipeline = joblib.load(\"cluster_pipeline.pkl\"); pipeline\n", "sel_cols = ['Sex','Marital status','Age','Education','Income','Occupation','Settlement size']\n", "df_segments, _ = do_clustering(df, pipeline, sel_cols=sel_cols)\n", "names = {1:\"Standard\",\n", " 2:\"Career-Focussed\",\n", " 3:\"Fewer-Opportunities\",\n", " 4:\"Well-off\"}\n", "\n", "df_segments['labels'] = df_segments['y'].map(names)\n", "df_segments.head().T" ] }, { "cell_type": "code", "execution_count": null, "id": "4abbd7b9-2c4b-4d6e-a94d-5ae93ab6a94e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Brand</th>\n", " <th>Price_1</th>\n", " <th>Price_2</th>\n", " <th>Price_3</th>\n", " <th>Price_4</th>\n", " <th>Price_5</th>\n", " <th>Promotion_1</th>\n", " <th>Promotion_2</th>\n", " <th>Promotion_3</th>\n", " <th>Promotion_4</th>\n", " <th>Promotion_5</th>\n", " <th>labels</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>2</td>\n", " <td>1.50</td>\n", " <td>1.90</td>\n", " <td>1.99</td>\n", " <td>2.09</td>\n", " <td>2.67</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>5</td>\n", " <td>1.39</td>\n", " <td>1.90</td>\n", " <td>1.91</td>\n", " <td>2.12</td>\n", " <td>2.62</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>1</td>\n", " <td>1.47</td>\n", " <td>1.90</td>\n", " <td>1.99</td>\n", " <td>1.97</td>\n", " <td>2.67</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>4</td>\n", " <td>1.21</td>\n", " <td>1.35</td>\n", " <td>1.99</td>\n", " <td>2.16</td>\n", " <td>2.68</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>2</td>\n", " <td>1.46</td>\n", " <td>1.88</td>\n", " <td>1.97</td>\n", " <td>1.89</td>\n", " <td>2.37</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>Fewer-Opportunities</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Brand Price_1 Price_2 Price_3 Price_4 Price_5 Promotion_1 \\\n", "0 2 1.50 1.90 1.99 2.09 2.67 0 \n", "1 5 1.39 1.90 1.91 2.12 2.62 1 \n", "2 1 1.47 1.90 1.99 1.97 2.67 0 \n", "3 4 1.21 1.35 1.99 2.16 2.68 1 \n", "4 2 1.46 1.88 1.97 1.89 2.37 1 \n", "\n", " Promotion_2 Promotion_3 Promotion_4 Promotion_5 labels \n", "0 0 0 0 0 Fewer-Opportunities \n", "1 0 0 0 1 Fewer-Opportunities \n", "2 0 0 1 0 Fewer-Opportunities \n", "3 1 0 0 0 Fewer-Opportunities \n", "4 0 0 1 1 Fewer-Opportunities " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features = \"Brand|Price*|Promotion*|labels\"\n", "df_brand_choice = df_segments[df_segments.Incidence == 1].filter(regex=features).drop(columns=[\"Last_Inc_Brand\"]).reset_index(drop=True); df_brand_choice.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "39b6f944-63d5-47a4-8ccc-7e317e97fc8c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Price_1</th>\n", " <th>Price_2</th>\n", " <th>Price_3</th>\n", " <th>Price_4</th>\n", " <th>Price_5</th>\n", " <th>Promotion_1</th>\n", " <th>Promotion_2</th>\n", " <th>Promotion_3</th>\n", " <th>Promotion_4</th>\n", " <th>Promotion_5</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1.50</td>\n", " <td>1.90</td>\n", " <td>1.99</td>\n", " <td>2.09</td>\n", " <td>2.67</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>1.39</td>\n", " <td>1.90</td>\n", " <td>1.91</td>\n", " <td>2.12</td>\n", " <td>2.62</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>1.47</td>\n", " <td>1.90</td>\n", " <td>1.99</td>\n", " <td>1.97</td>\n", " <td>2.67</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>1.21</td>\n", " <td>1.35</td>\n", " <td>1.99</td>\n", " <td>2.16</td>\n", " <td>2.68</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>1.46</td>\n", " <td>1.88</td>\n", " <td>1.97</td>\n", " <td>1.89</td>\n", " <td>2.37</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>14633</th>\n", " <td>1.48</td>\n", " <td>1.89</td>\n", " <td>2.01</td>\n", " <td>2.18</td>\n", " <td>2.69</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>14634</th>\n", " <td>1.35</td>\n", " <td>1.57</td>\n", " <td>2.02</td>\n", " <td>2.21</td>\n", " <td>2.70</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>14635</th>\n", " <td>1.50</td>\n", " <td>1.85</td>\n", " <td>2.06</td>\n", " <td>2.24</td>\n", " <td>2.79</td>\n", " <td>1</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>14636</th>\n", " <td>1.42</td>\n", " <td>1.51</td>\n", " <td>1.97</td>\n", " <td>2.24</td>\n", " <td>2.78</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>14637</th>\n", " <td>1.51</td>\n", " <td>1.82</td>\n", " <td>2.09</td>\n", " <td>2.24</td>\n", " <td>2.80</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>14638 rows × 10 columns</p>\n", "</div>" ], "text/plain": [ " Price_1 Price_2 Price_3 Price_4 Price_5 Promotion_1 Promotion_2 \\\n", "0 1.50 1.90 1.99 2.09 2.67 0 0 \n", "1 1.39 1.90 1.91 2.12 2.62 1 0 \n", "2 1.47 1.90 1.99 1.97 2.67 0 0 \n", "3 1.21 1.35 1.99 2.16 2.68 1 1 \n", "4 1.46 1.88 1.97 1.89 2.37 1 0 \n", "... ... ... ... ... ... ... ... \n", "14633 1.48 1.89 2.01 2.18 2.69 0 0 \n", "14634 1.35 1.57 2.02 2.21 2.70 1 1 \n", "14635 1.50 1.85 2.06 2.24 2.79 1 1 \n", "14636 1.42 1.51 1.97 2.24 2.78 0 0 \n", "14637 1.51 1.82 2.09 2.24 2.80 0 0 \n", "\n", " Promotion_3 Promotion_4 Promotion_5 \n", "0 0 0 0 \n", "1 0 0 1 \n", "2 0 1 0 \n", "3 0 0 0 \n", "4 0 1 1 \n", "... ... ... ... \n", "14633 0 0 0 \n", "14634 0 0 0 \n", "14635 0 0 0 \n", "14636 0 0 0 \n", "14637 0 0 0 \n", "\n", "[14638 rows x 10 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_choice.filter(regex=\"Pr\")" ] }, { "cell_type": "markdown", "id": "f01dde54-ccc0-493f-9ebc-b0259ae23921", "metadata": {}, "source": [ "## Brand choice probability" ] }, { "cell_type": "code", "execution_count": null, "id": "4ddb39d8-eac7-4096-865e-f8db96f3808e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LogisticRegression(multi_class='multinomial', solver='sag')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_brand = LogisticRegression(multi_class='multinomial', solver='sag')\n", "model_brand.fit(df_brand_choice.filter(regex=\"Pr\").values, df_brand_choice['Brand'].values)" ] }, { "cell_type": "code", "execution_count": null, "id": "b160ba61-c9bc-4baa-a7bc-77947c2a9544", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5, 10)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_brand.coef_.shape" ] }, { "cell_type": "code", "execution_count": null, "id": "8af91f31-516c-4c57-a715-a00cfcc8d0a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(['Price_1',\n", " 'Price_2',\n", " 'Price_3',\n", " 'Price_4',\n", " 'Price_5',\n", " 'Promotion_1',\n", " 'Promotion_2',\n", " 'Promotion_3',\n", " 'Promotion_4',\n", " 'Promotion_5'],\n", " [2, 5, 1, 4, 3])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_choice.filter(regex=\"Pr\").columns.tolist(), df_brand_choice.Brand.unique().tolist()" ] }, { "cell_type": "code", "execution_count": null, "id": "0f580a70-d823-4dda-b2f1-8a41ee84eed1", "metadata": {}, "outputs": [], "source": [ "df_brand_coeff = pd.DataFrame(model_brand.coef_, columns=df_brand_choice.filter(regex=\"Pr\").columns.tolist(), index=model_brand.classes_)" ] }, { "cell_type": "code", "execution_count": null, "id": "d0968f47-cf0d-4a6f-a8fa-6e725e597070", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<AxesSubplot:>" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 864x432 with 2 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12,6))\n", "sns.heatmap(data=df_brand_coeff, cmap=\"RdYlBu\", annot=True, ax=ax)" ] }, { "cell_type": "code", "execution_count": null, "id": "ce37fae1-4c4d-48c4-9693-dcd6393aa1c6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-4.469319087099478" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_coeff.loc[1, 'Price_1']" ] }, { "cell_type": "code", "execution_count": null, "id": "fe044afe-3d0b-4144-a7ce-b71cc6b64198", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((300,),\n", " array([0.5 , 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6 ,\n", " 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7 , 0.71,\n", " 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8 , 0.81, 0.82,\n", " 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9 , 0.91, 0.92, 0.93,\n", " 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1. , 1.01, 1.02, 1.03, 1.04,\n", " 1.05, 1.06, 1.07, 1.08, 1.09, 1.1 , 1.11, 1.12, 1.13, 1.14, 1.15,\n", " 1.16, 1.17, 1.18, 1.19, 1.2 , 1.21, 1.22, 1.23, 1.24, 1.25, 1.26,\n", " 1.27, 1.28, 1.29, 1.3 , 1.31, 1.32, 1.33, 1.34, 1.35, 1.36, 1.37,\n", " 1.38, 1.39, 1.4 , 1.41, 1.42, 1.43, 1.44, 1.45, 1.46, 1.47, 1.48,\n", " 1.49, 1.5 , 1.51, 1.52, 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.59,\n", " 1.6 , 1.61, 1.62, 1.63, 1.64, 1.65, 1.66, 1.67, 1.68, 1.69, 1.7 ,\n", " 1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.8 , 1.81,\n", " 1.82, 1.83, 1.84, 1.85, 1.86, 1.87, 1.88, 1.89, 1.9 , 1.91, 1.92,\n", " 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 1.99, 2. , 2.01, 2.02, 2.03,\n", " 2.04, 2.05, 2.06, 2.07, 2.08, 2.09, 2.1 , 2.11, 2.12, 2.13, 2.14,\n", " 2.15, 2.16, 2.17, 2.18, 2.19, 2.2 , 2.21, 2.22, 2.23, 2.24, 2.25,\n", " 2.26, 2.27, 2.28, 2.29, 2.3 , 2.31, 2.32, 2.33, 2.34, 2.35, 2.36,\n", " 2.37, 2.38, 2.39, 2.4 , 2.41, 2.42, 2.43, 2.44, 2.45, 2.46, 2.47,\n", " 2.48, 2.49, 2.5 , 2.51, 2.52, 2.53, 2.54, 2.55, 2.56, 2.57, 2.58,\n", " 2.59, 2.6 , 2.61, 2.62, 2.63, 2.64, 2.65, 2.66, 2.67, 2.68, 2.69,\n", " 2.7 , 2.71, 2.72, 2.73, 2.74, 2.75, 2.76, 2.77, 2.78, 2.79, 2.8 ,\n", " 2.81, 2.82, 2.83, 2.84, 2.85, 2.86, 2.87, 2.88, 2.89, 2.9 , 2.91,\n", " 2.92, 2.93, 2.94, 2.95, 2.96, 2.97, 2.98, 2.99, 3. , 3.01, 3.02,\n", " 3.03, 3.04, 3.05, 3.06, 3.07, 3.08, 3.09, 3.1 , 3.11, 3.12, 3.13,\n", " 3.14, 3.15, 3.16, 3.17, 3.18, 3.19, 3.2 , 3.21, 3.22, 3.23, 3.24,\n", " 3.25, 3.26, 3.27, 3.28, 3.29, 3.3 , 3.31, 3.32, 3.33, 3.34, 3.35,\n", " 3.36, 3.37, 3.38, 3.39, 3.4 , 3.41, 3.42, 3.43, 3.44, 3.45, 3.46,\n", " 3.47, 3.48, 3.49]))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prices = np.arange(0.5, 3.5,0.01); prices.shape, prices" ] }, { "cell_type": "code", "execution_count": null, "id": "c8ecc137-9d1f-449e-bf9a-8a4e13723863", "metadata": {}, "outputs": [], "source": [ "brand = 5" ] }, { "cell_type": "code", "execution_count": null, "id": "3cb81032-e61e-48ec-8eed-6d42a259bc2c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>index</th>\n", " <th>variable</th>\n", " <th>value</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>Price_1</td>\n", " <td>mean</td>\n", " <td>1.384559</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>Price_2</td>\n", " <td>mean</td>\n", " <td>1.764717</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>Price_3</td>\n", " <td>mean</td>\n", " <td>2.006694</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>Price_4</td>\n", " <td>mean</td>\n", " <td>2.159658</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>Price_5</td>\n", " <td>mean</td>\n", " <td>2.654296</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", " <td>Price_1</td>\n", " <td>min</td>\n", " <td>1.100000</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", " <td>Price_2</td>\n", " <td>min</td>\n", " <td>1.260000</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", " <td>Price_3</td>\n", " <td>min</td>\n", " <td>1.870000</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", " <td>Price_4</td>\n", " <td>min</td>\n", " <td>1.760000</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", " <td>Price_5</td>\n", " <td>min</td>\n", " <td>2.110000</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", " <td>Price_1</td>\n", " <td>max</td>\n", " <td>1.590000</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", " <td>Price_2</td>\n", " <td>max</td>\n", " <td>1.900000</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", " <td>Price_3</td>\n", " <td>max</td>\n", " <td>2.140000</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", " <td>Price_4</td>\n", " <td>max</td>\n", " <td>2.260000</td>\n", " </tr>\n", " <tr>\n", " <th>14</th>\n", " <td>Price_5</td>\n", " <td>max</td>\n", " <td>2.800000</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " index variable value\n", "0 Price_1 mean 1.384559\n", "1 Price_2 mean 1.764717\n", "2 Price_3 mean 2.006694\n", "3 Price_4 mean 2.159658\n", "4 Price_5 mean 2.654296\n", "5 Price_1 min 1.100000\n", "6 Price_2 min 1.260000\n", "7 Price_3 min 1.870000\n", "8 Price_4 min 1.760000\n", "9 Price_5 min 2.110000\n", "10 Price_1 max 1.590000\n", "11 Price_2 max 1.900000\n", "12 Price_3 max 2.140000\n", "13 Price_4 max 2.260000\n", "14 Price_5 max 2.800000" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_prices = pd.DataFrame({\"mean\":df_brand_choice.filter(regex=\"Price\").mean(),\n", " \"min\":df_brand_choice.filter(regex=\"Price\").min(),\n", " \"max\":df_brand_choice.filter(regex=\"Price\").max()}).reset_index().melt(id_vars='index')\n", "df_prices\n" ] }, { "cell_type": "code", "execution_count": null, "id": "1c5636ed-bb2d-4b1a-9805-1177daea2f07", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th>id</th>\n", " <th>Promotion_1-mean</th>\n", " <th>Promotion_2-mean</th>\n", " <th>Promotion_3-mean</th>\n", " <th>Promotion_4-mean</th>\n", " <th>Promotion_5-mean</th>\n", " <th>Promotion_1-min</th>\n", " <th>Promotion_2-min</th>\n", " <th>Promotion_3-min</th>\n", " <th>Promotion_4-min</th>\n", " <th>Promotion_5-min</th>\n", " <th>Promotion_1-max</th>\n", " <th>Promotion_2-max</th>\n", " <th>Promotion_3-max</th>\n", " <th>Promotion_4-max</th>\n", " <th>Promotion_5-max</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>0.372455</td>\n", " <td>0.349638</td>\n", " <td>0.043858</td>\n", " <td>0.128091</td>\n", " <td>0.04543</td>\n", " <td>0.0</td>\n", " <td>0.0</td>\n", " <td>0.0</td>\n", " <td>0.0</td>\n", " <td>0.0</td>\n", " <td>1.0</td>\n", " <td>1.0</td>\n", " <td>1.0</td>\n", " <td>1.0</td>\n", " <td>1.0</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ "id Promotion_1-mean Promotion_2-mean Promotion_3-mean Promotion_4-mean \\\n", "0 0.372455 0.349638 0.043858 0.128091 \n", "\n", "id Promotion_5-mean Promotion_1-min Promotion_2-min Promotion_3-min \\\n", "0 0.04543 0.0 0.0 0.0 \n", "\n", "id Promotion_4-min Promotion_5-min Promotion_1-max Promotion_2-max \\\n", "0 0.0 0.0 1.0 1.0 \n", "\n", "id Promotion_3-max Promotion_4-max Promotion_5-max \n", "0 1.0 1.0 1.0 " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regex=\"Price\"\n", "\n", "def get_df_summary(df_brand_choice, regex=\"Price\"):\n", " df = pd.DataFrame({\"mean\":df_brand_choice.filter(regex=regex).mean(),\n", " \"min\":df_brand_choice.filter(regex=regex).min(),\n", " \"max\":df_brand_choice.filter(regex=regex).max()}).reset_index().melt(id_vars='index')\n", " df['id'] = df['index'].str.cat(df['variable'], sep=\"-\")\n", " df = df.drop(columns=['index', 'variable'], axis=1)\n", " df = df.set_index('id').T.reset_index(drop=True)\n", " return df\n", "\n", "get_df_summary(df_brand_choice,regex=\"Promotion\")" ] }, { "cell_type": "code", "execution_count": null, "id": "0131d607-bf44-4601-9753-7d8ca4ad80f9", "metadata": {}, "outputs": [], "source": [ "include_promo = \"min\"\n", "brand = 5\n", "df_brand_elasticity=pd.DataFrame()\n", "df_brand_elasticity['prices'] = prices\n", "df_brand_elasticity['promo']= 1\n", "df_brand_elasticity['brand']= brand\n", "df_brand_elasticity = df_brand_elasticity.join(get_df_summary(df_brand_choice,regex=\"Price\")).ffill()\n", "df_brand_elasticity = df_brand_elasticity.join(get_df_summary(df_brand_choice,regex=\"Promotion\")).ffill()\n", "\n", "for br in model_brand.classes_:\n", " df_input = df_brand_elasticity.filter(regex=f\"(Price.*mean|Promo.*{include_promo})\").copy()\n", " df_input[f\"Price_{br}-mean\"] = df_brand_elasticity.prices\n", " probabilities = model_brand.predict_proba(df_input.values)\n", " df_brand_elasticity.loc[:, f\"Probabilities_{br}\" ] = probabilities[:,br-1]\n", " if br == brand: df_brand_elasticity.loc[:, f\"Elasticity_{br}\" ] = df_brand_coeff.loc[brand, f'Price_{brand}']*df_brand_elasticity.prices*(1- df_brand_elasticity[f\"Probabilities_{br}\"])\n", " else: df_brand_elasticity.loc[:, f\"Elasticity_{br}\" ] = -1*df_brand_coeff.loc[brand, f'Price_{brand}']*df_brand_elasticity.prices*df_brand_elasticity[f\"Probabilities_{br}\"]\n" ] }, { "cell_type": "code", "execution_count": null, "id": "08ebabaa-2e3e-41d5-85b9-1085326964bc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>prices</th>\n", " <th>promo</th>\n", " <th>brand</th>\n", " <th>Price_1-mean</th>\n", " <th>Price_2-mean</th>\n", " <th>Price_3-mean</th>\n", " <th>Price_4-mean</th>\n", " <th>Price_5-mean</th>\n", " <th>Price_1-min</th>\n", " <th>Price_2-min</th>\n", " <th>...</th>\n", " <th>Probabilities_1</th>\n", " <th>Elasticity_1</th>\n", " <th>Probabilities_2</th>\n", " <th>Elasticity_2</th>\n", " <th>Probabilities_3</th>\n", " <th>Elasticity_3</th>\n", " <th>Probabilities_4</th>\n", " <th>Elasticity_4</th>\n", " <th>Probabilities_5</th>\n", " <th>Elasticity_5</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>0.50</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>9.183243e-01</td>\n", " <td>0.265457</td>\n", " <td>0.853568</td>\n", " <td>0.246738</td>\n", " <td>0.002126</td>\n", " <td>0.000615</td>\n", " <td>0.652661</td>\n", " <td>0.188662</td>\n", " <td>0.709821</td>\n", " <td>-0.083881</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>0.51</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>9.143896e-01</td>\n", " <td>0.269606</td>\n", " <td>0.850910</td>\n", " <td>0.250889</td>\n", " <td>0.002180</td>\n", " <td>0.000643</td>\n", " <td>0.650092</td>\n", " <td>0.191678</td>\n", " <td>0.708717</td>\n", " <td>-0.085884</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>0.52</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>9.102819e-01</td>\n", " <td>0.273657</td>\n", " <td>0.848212</td>\n", " <td>0.254997</td>\n", " <td>0.002234</td>\n", " <td>0.000672</td>\n", " <td>0.647513</td>\n", " <td>0.194661</td>\n", " <td>0.707608</td>\n", " <td>-0.087901</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>0.53</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>9.059955e-01</td>\n", " <td>0.277606</td>\n", " <td>0.845475</td>\n", " <td>0.259062</td>\n", " <td>0.002290</td>\n", " <td>0.000702</td>\n", " <td>0.644924</td>\n", " <td>0.197611</td>\n", " <td>0.706493</td>\n", " <td>-0.089933</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>0.54</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>9.015243e-01</td>\n", " <td>0.281448</td>\n", " <td>0.842696</td>\n", " <td>0.263083</td>\n", " <td>0.002348</td>\n", " <td>0.000733</td>\n", " <td>0.642325</td>\n", " <td>0.200529</td>\n", " <td>0.705373</td>\n", " <td>-0.091980</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>295</th>\n", " <td>3.45</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>7.788910e-07</td>\n", " <td>0.000002</td>\n", " <td>0.010487</td>\n", " <td>0.020917</td>\n", " <td>0.057650</td>\n", " <td>0.114986</td>\n", " <td>0.036948</td>\n", " <td>0.073695</td>\n", " <td>0.222011</td>\n", " <td>-1.551743</td>\n", " </tr>\n", " <tr>\n", " <th>296</th>\n", " <td>3.46</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>7.335952e-07</td>\n", " <td>0.000001</td>\n", " <td>0.010264</td>\n", " <td>0.020532</td>\n", " <td>0.056995</td>\n", " <td>0.114010</td>\n", " <td>0.036359</td>\n", " <td>0.072730</td>\n", " <td>0.220519</td>\n", " <td>-1.559226</td>\n", " </tr>\n", " <tr>\n", " <th>297</th>\n", " <td>3.47</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>6.909231e-07</td>\n", " <td>0.000001</td>\n", " <td>0.010046</td>\n", " <td>0.020153</td>\n", " <td>0.056344</td>\n", " <td>0.113033</td>\n", " <td>0.035777</td>\n", " <td>0.071774</td>\n", " <td>0.219033</td>\n", " <td>-1.566714</td>\n", " </tr>\n", " <tr>\n", " <th>298</th>\n", " <td>3.48</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>6.507233e-07</td>\n", " <td>0.000001</td>\n", " <td>0.009832</td>\n", " <td>0.019781</td>\n", " <td>0.055696</td>\n", " <td>0.112056</td>\n", " <td>0.035204</td>\n", " <td>0.070826</td>\n", " <td>0.217553</td>\n", " <td>-1.574206</td>\n", " </tr>\n", " <tr>\n", " <th>299</th>\n", " <td>3.49</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>6.128534e-07</td>\n", " <td>0.000001</td>\n", " <td>0.009623</td>\n", " <td>0.019416</td>\n", " <td>0.055053</td>\n", " <td>0.111079</td>\n", " <td>0.034638</td>\n", " <td>0.069888</td>\n", " <td>0.216080</td>\n", " <td>-1.581702</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>300 rows × 43 columns</p>\n", "</div>" ], "text/plain": [ " prices promo brand Price_1-mean Price_2-mean Price_3-mean \\\n", "0 0.50 1 5 1.384559 1.764717 2.006694 \n", "1 0.51 1 5 1.384559 1.764717 2.006694 \n", "2 0.52 1 5 1.384559 1.764717 2.006694 \n", "3 0.53 1 5 1.384559 1.764717 2.006694 \n", "4 0.54 1 5 1.384559 1.764717 2.006694 \n", ".. ... ... ... ... ... ... \n", "295 3.45 1 5 1.384559 1.764717 2.006694 \n", "296 3.46 1 5 1.384559 1.764717 2.006694 \n", "297 3.47 1 5 1.384559 1.764717 2.006694 \n", "298 3.48 1 5 1.384559 1.764717 2.006694 \n", "299 3.49 1 5 1.384559 1.764717 2.006694 \n", "\n", " Price_4-mean Price_5-mean Price_1-min Price_2-min ... \\\n", "0 2.159658 2.654296 1.1 1.26 ... \n", "1 2.159658 2.654296 1.1 1.26 ... \n", "2 2.159658 2.654296 1.1 1.26 ... \n", "3 2.159658 2.654296 1.1 1.26 ... \n", "4 2.159658 2.654296 1.1 1.26 ... \n", ".. ... ... ... ... ... \n", "295 2.159658 2.654296 1.1 1.26 ... \n", "296 2.159658 2.654296 1.1 1.26 ... \n", "297 2.159658 2.654296 1.1 1.26 ... \n", "298 2.159658 2.654296 1.1 1.26 ... \n", "299 2.159658 2.654296 1.1 1.26 ... \n", "\n", " Probabilities_1 Elasticity_1 Probabilities_2 Elasticity_2 \\\n", "0 9.183243e-01 0.265457 0.853568 0.246738 \n", "1 9.143896e-01 0.269606 0.850910 0.250889 \n", "2 9.102819e-01 0.273657 0.848212 0.254997 \n", "3 9.059955e-01 0.277606 0.845475 0.259062 \n", "4 9.015243e-01 0.281448 0.842696 0.263083 \n", ".. ... ... ... ... \n", "295 7.788910e-07 0.000002 0.010487 0.020917 \n", "296 7.335952e-07 0.000001 0.010264 0.020532 \n", "297 6.909231e-07 0.000001 0.010046 0.020153 \n", "298 6.507233e-07 0.000001 0.009832 0.019781 \n", "299 6.128534e-07 0.000001 0.009623 0.019416 \n", "\n", " Probabilities_3 Elasticity_3 Probabilities_4 Elasticity_4 \\\n", "0 0.002126 0.000615 0.652661 0.188662 \n", "1 0.002180 0.000643 0.650092 0.191678 \n", "2 0.002234 0.000672 0.647513 0.194661 \n", "3 0.002290 0.000702 0.644924 0.197611 \n", "4 0.002348 0.000733 0.642325 0.200529 \n", ".. ... ... ... ... \n", "295 0.057650 0.114986 0.036948 0.073695 \n", "296 0.056995 0.114010 0.036359 0.072730 \n", "297 0.056344 0.113033 0.035777 0.071774 \n", "298 0.055696 0.112056 0.035204 0.070826 \n", "299 0.055053 0.111079 0.034638 0.069888 \n", "\n", " Probabilities_5 Elasticity_5 \n", "0 0.709821 -0.083881 \n", "1 0.708717 -0.085884 \n", "2 0.707608 -0.087901 \n", "3 0.706493 -0.089933 \n", "4 0.705373 -0.091980 \n", ".. ... ... \n", "295 0.222011 -1.551743 \n", "296 0.220519 -1.559226 \n", "297 0.219033 -1.566714 \n", "298 0.217553 -1.574206 \n", "299 0.216080 -1.581702 \n", "\n", "[300 rows x 43 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_elasticity" ] }, { "cell_type": "code", "execution_count": null, "id": "23e75a5e-a5a1-40a5-85b1-34ff05cd6075", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.8" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_elasticity['Price_5-max'][0]" ] }, { "cell_type": "code", "execution_count": null, "id": "e5282bbc-1605-4513-acab-de60d529651a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.lines.Line2D at 0xf1f6c080eb0>" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 864x432 with 2 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "o = 5 #Own Brand\n", "c = 4 #Cross Brand\n", "fig, axes = plt.subplots(1,2, figsize=(12,6))\n", "sns.lineplot(data=df_brand_elasticity, x=\"prices\", y=f\"Elasticity_{o}\", ax=axes[0]).set(title=f\"Own_brand_{o}\")\n", "axes[0].axvspan(df_brand_elasticity[f'Price_{o}-min'][0], df_brand_elasticity[f'Price_{o}-max'][0], alpha=.2, color='red')\n", "axes[0].axvline(df_brand_elasticity[f'Price_{o}-mean'][0], color='blue')\n", "sns.lineplot(data=df_brand_elasticity, x=\"prices\", y=f\"Elasticity_{c}\", ax=axes[1]).set(title=f\"Cross_brand_{c}\")\n", "axes[1].axvspan(df_brand_elasticity[f'Price_{c}-min'][0], df_brand_elasticity[f'Price_{c}-max'][0], alpha=.2, color='red')\n", "axes[1].axvline(df_brand_elasticity[f'Price_{c}-mean'][0], color='blue')" ] }, { "cell_type": "markdown", "id": "f6a67975-26fb-47af-8e88-3942cf4ca088", "metadata": {}, "source": [ "## Brand choice probability by segments" ] }, { "cell_type": "code", "execution_count": null, "id": "5827a4ed-904e-4991-9787-14808475562e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[None, 'Fewer-Opportunities', 'Well-off', 'Career-Focussed', 'Standard']" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "segments = df_segments['labels'].unique().tolist(); segments\n", "segments.insert(0, None)\n", "segments" ] }, { "cell_type": "code", "execution_count": null, "id": "2778493a-6ddb-420f-8aeb-ff8a0e3cc96e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>prices</th>\n", " <th>promo</th>\n", " <th>brand</th>\n", " <th>Price_1-mean</th>\n", " <th>Price_2-mean</th>\n", " <th>Price_3-mean</th>\n", " <th>Price_4-mean</th>\n", " <th>Price_5-mean</th>\n", " <th>Price_1-min</th>\n", " <th>Price_2-min</th>\n", " <th>...</th>\n", " <th>Elasticity_1</th>\n", " <th>Probabilities_2</th>\n", " <th>Elasticity_2</th>\n", " <th>Probabilities_3</th>\n", " <th>Elasticity_3</th>\n", " <th>Probabilities_4</th>\n", " <th>Elasticity_4</th>\n", " <th>Probabilities_5</th>\n", " <th>Elasticity_5</th>\n", " <th>label</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>0.50</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>0.265461</td>\n", " <td>0.853569</td>\n", " <td>0.246742</td>\n", " <td>0.002126</td>\n", " <td>0.000614</td>\n", " <td>0.652661</td>\n", " <td>0.188665</td>\n", " <td>0.709819</td>\n", " <td>-0.083883</td>\n", " <td>Aggregate</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>0.51</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>0.269610</td>\n", " <td>0.850911</td>\n", " <td>0.250893</td>\n", " <td>0.002179</td>\n", " <td>0.000643</td>\n", " <td>0.650092</td>\n", " <td>0.191681</td>\n", " <td>0.708715</td>\n", " <td>-0.085886</td>\n", " <td>Aggregate</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>0.52</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>0.273662</td>\n", " <td>0.848213</td>\n", " <td>0.255001</td>\n", " <td>0.002234</td>\n", " <td>0.000672</td>\n", " <td>0.647513</td>\n", " <td>0.194664</td>\n", " <td>0.707606</td>\n", " <td>-0.087903</td>\n", " <td>Aggregate</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>0.53</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>0.277611</td>\n", " <td>0.845475</td>\n", " <td>0.259066</td>\n", " <td>0.002290</td>\n", " <td>0.000702</td>\n", " <td>0.644924</td>\n", " <td>0.197614</td>\n", " <td>0.706491</td>\n", " <td>-0.089935</td>\n", " <td>Aggregate</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>0.54</td>\n", " <td>1</td>\n", " <td>5</td>\n", " <td>1.384559</td>\n", " <td>1.764717</td>\n", " <td>2.006694</td>\n", " <td>2.159658</td>\n", " <td>2.654296</td>\n", " <td>1.1</td>\n", " <td>1.26</td>\n", " <td>...</td>\n", " <td>0.281453</td>\n", " <td>0.842697</td>\n", " <td>0.263087</td>\n", " <td>0.002347</td>\n", " <td>0.000733</td>\n", " <td>0.642325</td>\n", " <td>0.200531</td>\n", " <td>0.705370</td>\n", " <td>-0.091982</td>\n", " <td>Aggregate</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 44 columns</p>\n", "</div>" ], "text/plain": [ " prices promo brand Price_1-mean Price_2-mean Price_3-mean \\\n", "0 0.50 1 5 1.384559 1.764717 2.006694 \n", "1 0.51 1 5 1.384559 1.764717 2.006694 \n", "2 0.52 1 5 1.384559 1.764717 2.006694 \n", "3 0.53 1 5 1.384559 1.764717 2.006694 \n", "4 0.54 1 5 1.384559 1.764717 2.006694 \n", "\n", " Price_4-mean Price_5-mean Price_1-min Price_2-min ... Elasticity_1 \\\n", "0 2.159658 2.654296 1.1 1.26 ... 0.265461 \n", "1 2.159658 2.654296 1.1 1.26 ... 0.269610 \n", "2 2.159658 2.654296 1.1 1.26 ... 0.273662 \n", "3 2.159658 2.654296 1.1 1.26 ... 0.277611 \n", "4 2.159658 2.654296 1.1 1.26 ... 0.281453 \n", "\n", " Probabilities_2 Elasticity_2 Probabilities_3 Elasticity_3 \\\n", "0 0.853569 0.246742 0.002126 0.000614 \n", "1 0.850911 0.250893 0.002179 0.000643 \n", "2 0.848213 0.255001 0.002234 0.000672 \n", "3 0.845475 0.259066 0.002290 0.000702 \n", "4 0.842697 0.263087 0.002347 0.000733 \n", "\n", " Probabilities_4 Elasticity_4 Probabilities_5 Elasticity_5 label \n", "0 0.652661 0.188665 0.709819 -0.083883 Aggregate \n", "1 0.650092 0.191681 0.708715 -0.085886 Aggregate \n", "2 0.647513 0.194664 0.707606 -0.087903 Aggregate \n", "3 0.644924 0.197614 0.706491 -0.089935 Aggregate \n", "4 0.642325 0.200531 0.705370 -0.091982 Aggregate \n", "\n", "[5 rows x 44 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_brand_elasticity_df(df_brand_choice, segment=None, brand=5, include_promo='min', max_iter=1000):\n", " label = \"Aggregate\"\n", " df = df_brand_choice.copy()\n", " if segment: \n", " label = segment\n", " df = df_brand_choice[df_brand_choice['labels'] == segment].copy()\n", " \n", " # Model Training\n", " model_brand = LogisticRegression(multi_class='multinomial', solver='sag', max_iter=max_iter)\n", " model_brand.fit(df.filter(regex=\"Pr\").values, df['Brand'].values)\n", " df_brand_coeff = pd.DataFrame(model_brand.coef_, columns=df.filter(regex=\"Pr\").columns.tolist(), index=model_brand.classes_)\n", " prices = np.arange(0.5, 3.5,0.01)\n", " df_brand_elasticity = pd.DataFrame()\n", " df_brand_elasticity['prices'] = prices\n", " df_brand_elasticity['promo']= 1\n", " df_brand_elasticity['brand']= brand\n", " df_brand_elasticity = df_brand_elasticity.join(get_df_summary(df,regex=\"Price\")).ffill()\n", " df_brand_elasticity = df_brand_elasticity.join(get_df_summary(df,regex=\"Promotion\")).ffill()\n", " for br in model_brand.classes_:\n", " df_input = df_brand_elasticity.filter(regex=f\"(Price.*mean|Promo.*{include_promo})\").copy()\n", " df_input[f\"Price_{br}-mean\"] = df_brand_elasticity.prices\n", " probabilities = model_brand.predict_proba(df_input.values)\n", " df_brand_elasticity.loc[:, f\"Probabilities_{br}\" ] = probabilities[:,br-1]\n", " if br == brand: df_brand_elasticity.loc[:, f\"Elasticity_{br}\" ] = df_brand_coeff.loc[brand, f'Price_{brand}']*df_brand_elasticity.prices*(1- df_brand_elasticity[f\"Probabilities_{br}\"])\n", " else: df_brand_elasticity.loc[:, f\"Elasticity_{br}\" ] = -1*df_brand_coeff.loc[brand, f'Price_{brand}']*df_brand_elasticity.prices*df_brand_elasticity[f\"Probabilities_{br}\"]\n", " df_brand_elasticity['label'] = label\n", " return df_brand_elasticity\n", " \n", "a = get_brand_elasticity_df(df_brand_choice,segment=segments[0])\n", "a.head()" ] }, { "cell_type": "code", "execution_count": null, "id": "089eddc2-f28b-4e7b-94bb-985e1f159363", "metadata": {}, "outputs": [], "source": [ "brands = [1,2,3,4,5]" ] }, { "cell_type": "code", "execution_count": null, "id": "96730469-cc3f-4197-8006-af5f7c195eb2", "metadata": {}, "outputs": [], "source": [ "df_brand_elasticity_all = pd.concat([get_brand_elasticity_df(df_brand_choice, segment=s, brand=b) for s,b in itertools.product(segments, brands)]).reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "746841cf-04a8-4060-9725-0b56ef0941c3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7500, 44)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_brand_elasticity_all.shape" ] }, { "cell_type": "code", "execution_count": null, "id": "0defda7b-82b1-4711-8d55-91aa484af285", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 5 }