return_of_experience.ipynb 594 KB
Newer Older
ondrejkopicka's avatar
init  
ondrejkopicka committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.6.8 (default, May  7 2019, 14:58:50) \n",
      "[GCC 5.4.0 20160609]\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "print(sys.version)\n",
    "# should be 3.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
OndrejKopicka's avatar
OndrejKopicka committed
32
      "start_time: 2019-11-13 17:40:00.226434\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
     ]
    }
   ],
   "source": [
    "from datetime import datetime\n",
    "start_time = datetime.now()\n",
    "print('start_time:', start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# pbi.ai templates\n",
OndrejKopicka's avatar
OndrejKopicka committed
47
    "## Return of Experience"
ondrejkopicka's avatar
init  
ondrejkopicka committed
48
49
50
51
52
53
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
54
55
    "Welcome!\n",
    "\n",
OndrejKopicka's avatar
OndrejKopicka committed
56
    "We created this notebook to provide a practical example of how AI and Data Science can be used when dealing with content personalization. It's also a follow up on our article Return of Experience which can be found at http://bit.ly/2qHwBBN \n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
57
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
58
59
    "**Our vision is that Artificial Intelligence isn't just about the code. Also, it's not just about fancy \"business talk\".**\n",
    "That's why we combine theory with practical examples wherever it's possible. Our aim is to share knowledge with fellow AI experts, data scientists, machine learning engineers, marketing professionals and business analysts. In other words, all the people who are dealing with the data every day. Don't reinvent the wheel!\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
60
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
61
62
    "Have you been wondering how AI can help improve business? Our articles and tips could help you on your journey :) Visit our blog:\n",
    "- http://bit.ly/pbiai-blog\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
63
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
64
65
66
67
68
69
70
71
72
    "Do you have an idea for a new AI product? Have you been thinking about using AI in your company? We can help you with that. You can reach us via our website\n",
    "- https://www.pbi.ai/\n",
    "\n",
    "or via social media\n",
    "\n",
    "- facebook ( https://www.facebook.com/pbiai/ )\n",
    "- LinkedIn ( https://www.linkedin.com/company/18178189/\n",
    "- Twitter ( https://twitter.com/pbi_ai ).\n",
    "\n",
OndrejKopicka's avatar
OndrejKopicka committed
73
    "Are you from the Czech Republic? Šablona je dostupná také v českém jazyce na http://bit.ly/AI_template_personalization_CZ\n",
OndrejKopicka's avatar
OndrejKopicka committed
74
    "\n",
OndrejKopicka's avatar
OndrejKopicka committed
75
    "Enjoy!\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
76
77
78
79
80
81
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
OndrejKopicka's avatar
OndrejKopicka committed
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
    "## Template Content\n",
    "### 1 Data\n",
    "#### 1.1 Data exploration: the amount of data in general\n",
    "#### 1.2 Data exploration: distribution over time\n",
    "#### 1.3 Data exploration: customer segments\n",
    "#### 1.4 Data exploration: item segments\n",
    "### 2 Experiments and AI prototyping\n",
    "#### 2.1 Hard coded rules\n",
    "#### 2.2 Machine Learning\n",
    "#### 2.3 Experiments and AI prototyping wrap-up"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 Data"
ondrejkopicka's avatar
init  
ondrejkopicka committed
99
100
101
102
103
104
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
105
    "**AI is only as good as the training data.** The result depends on how well the data covers key drivers of the problem we are trying to solve (read more on this topic in our article Unlocking AI potential in e-commerce and online business – the right data; https://www.pbi.ai/blog/2019/08/28/unlocking-ai-potential-in-e-commerce-the-right-data/ ).\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
106
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
107
    "In our examples, we will use a dummy dataset similar to a real e-commerce dataset. You can think of it as a log of purchases."
ondrejkopicka's avatar
init  
ondrejkopicka committed
108
109
110
111
112
113
114
115
116
117
118
119
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd # basic library for data manipulation\n",
    "\n",
    "purchases = pd.read_csv(\"dummy_data_purchases.csv\", sep=',') # load purchases\n",
    "customers = pd.read_csv(\"dummy_data_customers.csv\", sep=',') # load customers\n",
ondrejkopicka's avatar
ondrejkopicka committed
120
121
122
    "items = pd.read_csv(\"dummy_data_items.csv\", sep=',') # load items\n",
    "\n",
    "purchases['timestamp'] = purchases['timestamp'].apply(\n",
OndrejKopicka's avatar
OndrejKopicka committed
123
    "    lambda timestamp_string: datetime.strptime(timestamp_string, '%Y-%m-%d %H:%M:%S.%f') # parse the timestamp into the datetime object\n",
ondrejkopicka's avatar
ondrejkopicka committed
124
125
126
127
128
129
130
131
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First five rows of our **purchases dataset**:"
ondrejkopicka's avatar
init  
ondrejkopicka committed
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "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>customerid</th>\n",
       "      <th>itemid</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11779</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
171
       "      <td>2018-02-17 11:09:09.629588</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
172
173
174
175
176
177
       "      <td>12783.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15492</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
178
       "      <td>2019-02-20 02:01:51.322820</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
179
180
181
182
183
184
       "      <td>12648.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>11480</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
185
       "      <td>2018-04-12 07:01:25.615314</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
186
187
188
189
190
191
       "      <td>13456.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10002</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
192
       "      <td>2018-05-09 10:01:18.987823</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
193
194
195
196
197
198
       "      <td>12244.96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>16456</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
199
       "      <td>2019-02-07 19:01:58.634323</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
200
201
202
203
204
205
206
       "      <td>13186.88</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
207
       "   customerid  itemid                  timestamp     price\n",
OndrejKopicka's avatar
OndrejKopicka committed
208
209
210
211
212
       "0       11779   45481 2018-02-17 11:09:09.629588  12783.20\n",
       "1       15492   45481 2019-02-20 02:01:51.322820  12648.64\n",
       "2       11480   45481 2018-04-12 07:01:25.615314  13456.00\n",
       "3       10002   45481 2018-05-09 10:01:18.987823  12244.96\n",
       "4       16456   45481 2019-02-07 19:01:58.634323  13186.88"
ondrejkopicka's avatar
init  
ondrejkopicka committed
213
214
215
216
217
218
219
220
221
222
223
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "purchases[:5]"
   ]
  },
ondrejkopicka's avatar
ondrejkopicka committed
224
225
226
227
228
229
230
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First five rows of our **customers dataset**:"
   ]
  },
ondrejkopicka's avatar
init  
ondrejkopicka committed
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
  {
   "cell_type": "code",
   "execution_count": 5,
   "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>customerid</th>\n",
       "      <th>locationid</th>\n",
       "      <th>agegroupid</th>\n",
       "      <th>sexid</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10000</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10001</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10002</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10003</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10004</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   customerid  locationid  agegroupid  sexid\n",
       "0       10000           7           0      0\n",
       "1       10001           9           4      1\n",
       "2       10002           2           2      0\n",
       "3       10003           5           0      0\n",
       "4       10004           5           0      0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "customers[:5]"
   ]
  },
ondrejkopicka's avatar
ondrejkopicka committed
321
322
323
324
325
326
327
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First five rows of our **items dataset**:"
   ]
  },
ondrejkopicka's avatar
init  
ondrejkopicka committed
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
  {
   "cell_type": "code",
   "execution_count": 6,
   "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>itemid</th>\n",
       "      <th>categoryid</th>\n",
       "      <th>colorid</th>\n",
       "      <th>price_default</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>10140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>32775</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>16845</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>6904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>32777</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>18930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32779</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3557</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   itemid  categoryid  colorid  price_default\n",
       "0       6           0        6          10140\n",
       "1   32775           3        1          16845\n",
       "2       8           5        3           6904\n",
       "3   32777           2        6          18930\n",
       "4   32779           2        0           3557"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "items[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
ondrejkopicka's avatar
ondrejkopicka committed
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
   "outputs": [],
   "source": [
    "# merge customer and item features with purchases\n",
    "purchases = pd.merge(purchases, customers, on='customerid')\n",
    "purchases = pd.merge(purchases, items, on='itemid')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First five rows of our **purchases dataset after merging item features and customer features**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
ondrejkopicka's avatar
init  
ondrejkopicka committed
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
   "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>customerid</th>\n",
       "      <th>itemid</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>price</th>\n",
       "      <th>locationid</th>\n",
       "      <th>agegroupid</th>\n",
       "      <th>sexid</th>\n",
       "      <th>categoryid</th>\n",
       "      <th>colorid</th>\n",
       "      <th>price_default</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11779</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
479
       "      <td>2018-02-17 11:09:09.629588</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
480
481
482
483
484
485
486
487
488
489
490
491
       "      <td>12783.20</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>13456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15492</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
492
       "      <td>2019-02-20 02:01:51.322820</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
493
494
495
496
497
498
499
500
501
502
503
504
       "      <td>12648.64</td>\n",
       "      <td>13</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>13456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>11480</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
505
       "      <td>2018-04-12 07:01:25.615314</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
506
507
508
509
510
511
512
513
514
515
516
517
       "      <td>13456.00</td>\n",
       "      <td>14</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>13456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10002</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
518
       "      <td>2018-05-09 10:01:18.987823</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
519
520
521
522
523
524
525
526
527
528
529
530
       "      <td>12244.96</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>13456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>16456</td>\n",
       "      <td>45481</td>\n",
OndrejKopicka's avatar
OndrejKopicka committed
531
       "      <td>2019-02-07 19:01:58.634323</td>\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
532
533
534
535
536
537
538
539
540
541
542
543
544
       "      <td>13186.88</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>13456</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
545
       "   customerid  itemid                  timestamp     price  locationid  \\\n",
OndrejKopicka's avatar
OndrejKopicka committed
546
547
548
549
550
       "0       11779   45481 2018-02-17 11:09:09.629588  12783.20          12   \n",
       "1       15492   45481 2019-02-20 02:01:51.322820  12648.64          13   \n",
       "2       11480   45481 2018-04-12 07:01:25.615314  13456.00          14   \n",
       "3       10002   45481 2018-05-09 10:01:18.987823  12244.96           2   \n",
       "4       16456   45481 2019-02-07 19:01:58.634323  13186.88          12   \n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
551
552
553
554
555
556
557
558
559
       "\n",
       "   agegroupid  sexid  categoryid  colorid  price_default  \n",
       "0           0      0           3        4          13456  \n",
       "1           3      0           3        4          13456  \n",
       "2           3      0           3        4          13456  \n",
       "3           2      0           3        4          13456  \n",
       "4           0      1           3        4          13456  "
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
560
     "execution_count": 8,
ondrejkopicka's avatar
init  
ondrejkopicka committed
561
562
563
564
565
566
567
568
569
570
571
572
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "purchases[:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
573
    "Now, each row contains the following columns:\n",
ondrejkopicka's avatar
ondrejkopicka committed
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
    "\n",
    "`customerid`: unique identifier of a customer\n",
    "\n",
    "`itemid`: unique identifier of an item\n",
    "\n",
    "`timestamp`: date and time of the purchase\n",
    "\n",
    "`price`: item price during the purchase (including discounts)\n",
    "\n",
    "`locationid`: unique identifier of a customer location\n",
    "\n",
    "`agegroupid`: unique identifier of a customer age group\n",
    "\n",
    "`sexid`: unique identifier of a customer sex\n",
    "\n",
    "`categoryid`: unique identifier of an item category\n",
    "\n",
    "`colorid`: unique identifier of an item color\n",
    "\n",
    "`price_default`: default item price (before discounts)"
ondrejkopicka's avatar
init  
ondrejkopicka committed
594
595
596
597
598
599
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
600
    "Basically, **creating of a content personalization tool is the process of capturing relationships between items and customers**. That's why we need to check the distribution of our data first to determine if sufficient information is available.\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
601
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
602
    "**Important things to look for:**\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
603
    "    - the amount of data in general\n",
ondrejkopicka's avatar
ondrejkopicka committed
604
605
606
    "    - distribution over time; date-time related anomalies (e.g. Christmas sales)\n",
    "    - customer segments\n",
    "    - item segments\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
607
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
608
    "Initial analysis helps us decide what AI method might be the best fit for our case. Let's explore the data!"
ondrejkopicka's avatar
init  
ondrejkopicka committed
609
610
611
612
613
614
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
OndrejKopicka's avatar
OndrejKopicka committed
615
    "### 1.1 Data exploration: the amount of data in general"
ondrejkopicka's avatar
init  
ondrejkopicka committed
616
617
618
619
   ]
  },
  {
   "cell_type": "code",
ondrejkopicka's avatar
ondrejkopicka committed
620
   "execution_count": 9,
ondrejkopicka's avatar
init  
ondrejkopicka committed
621
622
623
624
625
626
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
ondrejkopicka's avatar
ondrejkopicka committed
627
628
629
630
631
632
      "rows: 66658\n",
      "customerids: 9990\n",
      "itemids: 10337\n",
      "categoryids: 6\n",
      "colorids: 9\n",
      "\n",
ondrejkopicka's avatar
ondrejkopicka committed
633
      "Number of nrows containing a null or missing value: 0\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
634
      "\n",
OndrejKopicka's avatar
OndrejKopicka committed
635
636
      "min date: 2018-02-13 00:18:49.821487\n",
      "max date: 2019-04-23 22:01:21.205666\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
637
638
      "\n",
      "min price: 1.6\n",
ondrejkopicka's avatar
ondrejkopicka committed
639
      "max price: 24996.0\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
640
641
642
643
     ]
    }
   ],
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
644
    "from collections import Counter # function for quick computation of \n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
645
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
646
    "print('rows:', purchases.shape[0])\n",
OndrejKopicka's avatar
OndrejKopicka committed
647
    "for column_name in ['customerid', 'itemid', 'categoryid', 'colorid']:\n",
ondrejkopicka's avatar
ondrejkopicka committed
648
    "    print('%ss: %d' % (\n",
OndrejKopicka's avatar
OndrejKopicka committed
649
650
    "        column_name,\n",
    "        len(set(purchases[column_name]))\n",
ondrejkopicka's avatar
ondrejkopicka committed
651
    "    ))\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
652
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
653
    "print('\\nNumber of nrows containing a null or missing value:', Counter(pd.isnull(purchases).any(axis=1))[True])\n",
ondrejkopicka's avatar
ondrejkopicka committed
654
    "    \n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
655
656
657
658
    "print('\\nmin date:', min(purchases['timestamp']))\n",
    "print('max date:', max(purchases['timestamp']))\n",
    "\n",
    "print('\\nmin price:', min(purchases['price']))\n",
ondrejkopicka's avatar
ondrejkopicka committed
659
    "print('max price:', max(purchases['price']))"
ondrejkopicka's avatar
init  
ondrejkopicka committed
660
661
662
663
664
665
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
666
    "Our brief analysis revealed that we are dealing with **66k purchases across ~10k customers during a ~14-month period which is approximately one purchase per two months per customer**. The amount of data looks sufficient at first sight, and we will get a more precise picture once we analyze the data distribution.\n",
ondrejkopicka's avatar
ondrejkopicka committed
667
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
668
    "We should mention that **there are no null or missing values**. This is good. If the opposite was true, we would need to find out what exactly happened in those cases. It is very important to know what data should be filtered out or replaced before mathematical modeling."
ondrejkopicka's avatar
ondrejkopicka committed
669
670
671
672
673
674
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
OndrejKopicka's avatar
OndrejKopicka committed
675
    "### 1.2 Data exploration: distribution over time"
ondrejkopicka's avatar
ondrejkopicka committed
676
677
678
679
680
681
682
683
684
685
686
687
688
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another important thing to look at is the data distribution over time. The main reason is to **detect anomalies related to specific periods of the time**. Using data from these periods could damage our model because we want it to reflect the most common conditions.\n",
    "\n",
    "Based on this analysis we can also determine whether we should build more models for some specific periods (e.g. workweek and weekend)."
   ]
  },
  {
   "cell_type": "code",
ondrejkopicka's avatar
ondrejkopicka committed
689
   "execution_count": 10,
ondrejkopicka's avatar
ondrejkopicka committed
690
   "metadata": {},
ondrejkopicka's avatar
ondrejkopicka committed
691
692
   "outputs": [],
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
693
694
695
    "import numpy as np # library for the basic mathematical functions\n",
    "import matplotlib # library for plotting\n",
    "import matplotlib.pyplot as plt\n",
ondrejkopicka's avatar
ondrejkopicka committed
696
697
698
699
700
701
702
703
704
    "import seaborn as sns # library for plotting\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
ondrejkopicka's avatar
ondrejkopicka committed
705
706
707
   "outputs": [
    {
     "data": {
OndrejKopicka's avatar
OndrejKopicka committed
708
      "image/png": "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Vqtxdnamffv2FBcXk5iYSHh4eN308V+O879u9r1ITk5m7NixODg4oFarefPNNxk3btwNvzcTJ07ks88+o7q6mt27dzNkyBBcXFxuuP+ECRNITk6moKCAnTt3ct999+Hq6nrD/QH69euHs7MzAN26daO4uPi6+w0cOBAXFxccHBzQ6XTce++9ALRr146ioiIAvv32WyZNmoStrS1qtZqpU6fy3Xff1R3jl0bV19cXLy+vG57rejXv06cP586dY+rUqbz77rtMmzaN9u3b3/TahBBCWC5pgoUQQjSLnj17cvHiRXJzc6957sCBA/Tq1Qv4tdk6deoUpaWl9O/fH5PJhNlsZtOmTXUje59++ikzZ84EwM7ODhubK3f0nDhxgkmTJlFWVkZ4eDhPPfVUo3IuXbqUd955h3bt2rF27VqeeeaZuud+OQeASqXCbDbXjfj+ltlsrmv4NRrNVdvV6l//V/vb50wm01WPf+Hg4HDNOTUazVXnvd7r4Obfi99eC0BeXh56vf66x4ErDXW3bt34+uuv696cuBlXV1dGjhzJzp072bp161X3Dt/I9a71euzs7K56/L/XAle+n//7uKampu6xvb19g851vZoHBwfz+eef8/TTT1NWVsYTTzxBQkLCTa5MCCGEJZMmWAghRLPw9fVl6tSp/OlPfyInJ6du+9atW9m7dy8zZsyo269Hjx787W9/qxuFdXZ2pmfPnnzwwQfAlXuFH3nkEfbt23fNeQ4dOkT37t154okn6NevH/v27bvuVOHrKSgoYPDgwbi7u/P444/zxz/+kTNnztz0NREREcTHx9dNZd66dSvu7u51I4O/jJ5WVVWxfft2hgwZUvfaHTt2AFea1bS0NO65554G5YyIiCAlJaXu+/jLtOP/dbPvRVhYGLt376a6uhqTycTLL7/Mf/7zHzQazVXN4m899NBDrF27lsrKSvr06XPN8xqN5qrR/ilTprB+/XrMZjN33313g66tqdx7771s2rSJmpoaTCYTGzZsIDw8vN7X/e81XM/GjRtZsGABERERzJ8/n4iICM6ePdtU0YUQQrQwWRhLCCFEs/nzn/9MbGwss2fPprq6murqau666y42bdpEYGBg3X4xMTE8++yzvP3223Xbli5dyt///neioqKorq5mzJgxPPjgg3XTjn8xZswY9u7dy6hRo7C1tSUsLIzi4mLK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705xcXEARhs5QiHXAwcOcM899zB8+HB+8pOfsH///gCMNHI0ZaanvfLKK/zXf/3XWdsXL17MtGnTLnNEkc0feX7++eeMGTOG4cOHM3HiRIqKis65r/N9Rk9Tng0XCvnp2Na/QiHTkDy+NaRR8vPzjR/+8IdGVVWVUV1dbUyYMMFYuXKlkZubaxw6dMioqakx7r//fuPDDz80DMMwTpw4YUycONG45pprjCVLltS386tf/cp46623DMMwjDfffNP45S9/ec79Pfjgg8aqVasMwzCMOXPmGDNmzDAMwzDuuece41//+pdhGIbx9ttvG0888UTAxhzOQiXP+fPnG6+++moghxoRQiXP73ryySeNefPm+XuoESVUch03blx9e5999pkxYsSIgI053DV1puXl5cZTTz1lXHPNNcbs2bPrt1dWVhq/+93vjOzsbGPq1KkBHHF480eePp/PyM3NNTZu3GgYhmG8++67xsSJE8+5v/N9RpVn44RKfjq29Z9QyTQUj291JriRHA4H06ZNIyYmhujoaDp27MiBAwdo164dbdq0wWKxMHz4cFavXg3AypUrufXWW7njjjvOaMfn8+F2uwHwer3ExcWdta+amho2b97MoEGDgFNnl063u2DBAvr164fP5+PYsWMkJSUFcthhK1Ty/OKLL8jPz2fUqFFMmjSJ48ePB3LYYStU8jxt48aNfP311zzwwAOBGG7ECJVcd+3axeDBgwHIzs6msLCQw4cPB2zc4awpMwV4//33ad++Pffdd98Z2zdv3ozP5+PJJ58MwCgjhz/ydDqdVFZW0rt3bwD69+/P+vXrqa6uPmNfF/qMKs/GCZX8dGzrP6GSaSge36oIbqROnTqRnZ0NnJoal5eXh8lkwuFw1L8mPT2dgoICAH7+858zduzYs9p57LHH+POf/8zNN9/MG2+8cc6DZKfTSWJiIhaLBTj1C326XYvFQnl5Of369eOvf/0rd999t9/HGglCJU+bzcaECRNYtmwZubm5PP74434fayQIlTxPmz17No8//jhms9lvY4xEoZJr9+7deffdd4FTf+AoLS0979QwubCmzBRg1KhRPPjgg2d9Fvv27cuUKVPOWzzLpfFHnqmpqcTHx7N+/XoA3n33XWpqanA6nWe87kKfUeXZOKGSn45t/SdUMg3F41sVwZdpz5493H///UydOpW2bdue9bzJZLrg+6dOncrzzz/Pxx9/zK9//Wt+8YtfYBjGGa/5/uPvt5uUlMT69euZNWsWkydPpq6urpGjkWDn+fzzz3PbbbcB8KMf/Yi9e/ficrkaO5yIF+w8T/fB6XTSv3//Ro5Cvi/Yub744ousXbuWESNGkJ+fT9euXYmOjr6MEUlTZCpN53LyNJlMzJ49m9dee41Ro0bhcrlISUk56zN2se9eabxQyE/Htv4V7ExD8fhWRfBl2Lp1K/feey+//OUvGT16NBkZGWcselNYWEh6evp5319SUsK3335b/0sxaNAgioqKcDqd9ReOjxw5Ervdjtvtrv8CKCoqqm83Ly+v/peuX79+VFZWUlZWFqghh7Vg5+nz+Zg3b95ZX/Sn/6ImDRPsPE977733GDJkSIBGGXlCIdfa2lrmzp3LihUreOKJJzh69CitW7cO4KjDW1NlKk3jcvOEU//uLVy4kGXLljF69Gh8Ph8pKSkN+u6VxgmF/HRs61/BzjRUj29VBDfS8ePHefjhh5k5cyZDhw4FoGfPnuzfv5+DBw9SV1fHqlWr6Nev33nbSE1NJTY2li1btgCnfkkTEhKw2+0sX768Ag29QwAABjZJREFU/r/o6GhycnLIy8sDYNmyZfXtvvHGG6xbtw6ATz75hNTUVOx2eyCHHpZCIc+oqCjWrVvHmjVr6rf37NkTq9Ua4NGHn1DI87Tt27eTk5MTwNFGjlDJ9eWXX+b9998HYNGiRfTo0YPU1NRADj1sNWWmEnj+yBPg6aef5vPPPwdOHecMHjyYqKioBn33SsOFSn46tvWfUMg0VI9vdYqpkebPn09VVRUvvvhi/bZx48bx4osv8sgjj1BVVUVubm794innYjKZmDNnDv/xH/9BZWUlCQkJ57xlA8Czzz7LtGnTmDdvHllZWcyaNQs4NS3vmWeeYe7cudhsNmbPnu3fgUaIUMnzpZdeqs/TbrfXL2UvDRMqeQIcPnyYjIwM/w0ugoVKrr/61a+YOnUqc+bMISMjgxdeeMG/A40gTZ2pBJY/8gR47rnnePbZZ/F6vXTp0oXf/OY353zdhb57peFCJT8d2/pPqGQaise3JkMXzYiIiIiIiEiE0HRoERERERERiRgqgkVERERERCRiqAgWERERERGRiKEiWERERERERCKGimARERERERGJGCqCRUREGujIkSN06dKF8ePHn/XcU089RZcuXSgpKWl0+3PmzOG9994DYNq0acyfP7/RbfnDp59+yrBhw4LaBxEREX9RESwiItIIsbGxHDhwgKNHj9Zvq6ioYOvWrZfd9qeffkptbe1ltyMiIiJnswS7AyIiIs2R2WzmjjvuYOXKlUyaNAmAtWvXcuutt/LGG2/Uv+5//ud/WLhwIVFRUbRo0YJnnnmGDh06MG3aNBITE9m9ezcnTpzgiiuuYNasWSxbtoydO3cyY8YMzGYzAJ999hnjxo2juLiYTp068fvf/574+Pgz+nO+9hISEujSpQsbN27EbrcD1D/es2cPs2bNIj09nT179mC1WnnkkUdYuHAh+/fvZ+DAgTz99NPAqQL/0Ucf5eDBgyQlJfH888/ToUMHqqurmTlzJps3b6auro7u3bszffp0EhMTGTBgANdccw27d+/miSee4Pbbb2+KaERERC5IZ4JFREQaadSoUaxYsaL+8bJlyxg9enT9440bN/KnP/2JN998kxUrVjBs2DAefvhhDMMAYOfOncyfP5+8vDwKCwtZvXo148ePp0ePHkyZMqW+aCwoKGDBggWsWbOGgoIC1q5de87+nKu9i/niiy+YPHkyq1evJi0tjddff53XXnuNpUuX8vbbb1NQUADA8ePHuffee1m+fDnDhg1jypQpALz++uuYzWaWLl3KihUrSE9PZ+bMmfXtd+rUiX/84x8qgEVEJGToTLCIiEgj9ejRg6ioKHbu3ElaWhoej4fOnTvXP//xxx8zZMiQ+jOwd955J7/5zW84cuQIADfffDMxMTEAdO7cmbKysnPu57bbbsNqtQKnisrzXW98qe19V+vWrenevTsAbdu2xWazERMTg91uJyEhob6NLl26cN111wEwevRonnvuOVwuFx9++CEul4sNGzYAUFNTQ1paWn37OTk5F+2DiIhIU1IRLCIichlGjBjBihUrsNvtjBw58oznTp/x/f6209f7xsXF1W83mUznfD2AxWK5pNddSnvV1dVnPD5dNJ9rX98VFXXm5DGTyYTFYsHn8/H000+Tm5sLgMfjoaqqqv5135+2LSIiEmyaDi0iInIZRo4cyerVq8nLyztrBeW+ffuSl5dXf+Z2yZIlpKSk0K5duwu2aTab/bowlt1u54svvgBg3bp1jWpj9+7d7Nq1Czh1nXOvXr2wWq307duXt956i+rqanw+H8888wyzZs3yW99FRET8TWeCRURELkNGRgYdO3bEZrORkpJyxnN9+vTh3nvv5ac//Sk+nw+73c5rr7121lnV7+vfvz8vvfQSNTU1funj9OnTef7550lKSuKmm27C4XA0uI0rrriCOXPmcPjwYdLS0njxxRcBeOihh3jppZcYPXo0dXV1dOvWjWnTpvml3yIiIoFgMs43p0pEREREREQkzGg6tIiIiIiIiEQMFcEiIiIiIiISMVQEi4iIiIiISMRQESwiIiIiIiIRQ0WwiIiIiIiIRAwVwSIiIiIiIhIxVASLiIiIiIhIxFARLCIiIiIiIhHj/wMZufmcXFWO7gAAAABJRU5ErkJggg==\n",
ondrejkopicka's avatar
ondrejkopicka committed
709
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
710
       "<Figure size 1152x216 with 1 Axes>"
ondrejkopicka's avatar
ondrejkopicka committed
711
712
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
713
     "metadata": {},
ondrejkopicka's avatar
ondrejkopicka committed
714
715
716
717
     "output_type": "display_data"
    }
   ],
   "source": [
OndrejKopicka's avatar
OndrejKopicka committed
718
    "pd.plotting.register_matplotlib_converters() # timeseries converter\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
719
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
720
    "sns.set(rc={'figure.figsize':(16, 3)})\n",
ondrejkopicka's avatar
ondrejkopicka committed
721
    "plt.figure()\n",
ondrejkopicka's avatar
ondrejkopicka committed
722
    "plt.title('Overall shopping activity in months:')\n",
OndrejKopicka's avatar
OndrejKopicka committed
723
    "plt.plot(purchases.set_index('timestamp').resample('M').count())\n",
ondrejkopicka's avatar
ondrejkopicka committed
724
    "plt.xlabel('Month number')\n",
ondrejkopicka's avatar
ondrejkopicka committed
725
    "plt.ylabel('Number of purchases')\n",
ondrejkopicka's avatar
ondrejkopicka committed
726
727
728
729
730
731
732
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
OndrejKopicka's avatar
wording    
OndrejKopicka committed
733
    "The purchases distribution over time is extremely volatile. This could mean that there were big changes in the marketing strategy, big sales or other unusual time-related events. It could also mean that there was a software bug or an ETL-related problem (ETL = data Extraction-Transformation-Loading). **An important part of an AI development is perfect data understanding. We need to know what data should be filtered out**. In this particular case, we would ask the people who are responsible for creating this data set to clarify the meaning of spikes and dips in the number of purchases. For instance, what happened between March and August 2018?"
ondrejkopicka's avatar
init  
ondrejkopicka committed
734
735
736
737
738
739
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
OndrejKopicka's avatar
OndrejKopicka committed
740
    "### 1.3 Data exploration: customer segments"
ondrejkopicka's avatar
init  
ondrejkopicka committed
741
742
743
744
745
746
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
747
    "If we want to capture relationships between items, we need a proper number of customers who have bought at least two different items. This information tells us which items are probably related. If our customers are mostly one-time buyers, we will have a tough time. In such case, we will depend on the availability of customer-related features (e.g. gender and location) which could help us compute a similarity between customers and thus possible relevance between their purchases. **People data could be very tricky and if we underestimate the data preparation, we are at risk of developing a useless tool** (read more on this topic in our article Unlocking AI potential in e-commerce and online business – ethics; https://www.pbi.ai/blog/2019/09/17/unlocking-ai-potential-in-e-commerce-ethics/ )."
ondrejkopicka's avatar
init  
ondrejkopicka committed
748
749
750
751
   ]
  },
  {
   "cell_type": "code",
ondrejkopicka's avatar
ondrejkopicka committed
752
   "execution_count": 12,
ondrejkopicka's avatar
init  
ondrejkopicka committed
753
754
755
756
757
758
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
ondrejkopicka's avatar
ondrejkopicka committed
759
      "One-time Buyers:  92\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
760
761
762
763
     ]
    },
    {
     "data": {
ondrejkopicka's avatar
ondrejkopicka committed
764
      "image/png": "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Y908iUSC9PR0owZGREREREREVNP0JsEXLlwwRRxERERERERERqc3CdZqtdi0aROOHz8OtVqN/v37Y8aMGeWeFE1ERERERERUH+h9T/Dy5ctx8uRJTJo0CVOmTMG5c+ewZMkSU8RGREREREREVKP0ns796aefsHPnTlhaWgIAXnvtNbz++utGD4yIiIiIiIiopuk9EyyE0CXAAGBlZVVumoiIiIiIiKi+0JsEOzs7IzY2FtevX8f169exePFidOzY0RSxEREREREREdUovUlwVFQU7t27B39/f4wbNw4FBQX48MMPTREbERERERERUY3Se0/wyZMnERcXV25eUlISRowYYbSgiIiIiIiIiIzhsUnwkSNHoFarsXTpUgghIIQAAKjVaqxYsYJJMBEREREREdU7j02C09PTcfLkSeTn5+Pbb7/93woyGd566y2TBEdERERERERUkx6bBAcHByM4OBhbt25FQEBAtTZeVFQEf39/bNiwAa1atUJKSgoWL14MpVIJLy8vhIaGAniQcEdERKCoqAi9evXCRx99BJlMhpycHMydOxf5+flo27Yt4uPj0bhx4+q1lIiIiIiIiMye3gdjubu74/DhwwCA2NhYBAYG4vfff9e74fPnz2PChAnIzMwEAJSWlmLBggVYt24d9u/fj7S0NBw7dgwAMHfuXERGRuLAgQMQQmDHjh0AgI8++ghvvPEGkpOT8fLLL2PdunXVbScRERERERGR/iQ4PDwcWVlZSE1NxcmTJzFixAh88skneje8Y8cOREVFwcHBAQBw4cIFtGnTBk5OTpDJZPD19UVycjKys7NRWlqKbt26AQBGjRqF5ORkqFQqnDp1Ch4eHuXmExEREREREVWX3iT4zp07mDx5Mo4fPw4fHx+MGjUKJSUleje8aNEi9OrVSzedm5sLuVyum3ZwcIBCoagwXy6XQ6FQ4Pbt27Czs4NMJis3n6ih0mgsUFwsMehHo9E7dImIiIiIqBJ6X5GkUqmgUqnw008/IS4uDiUlJSguLq5yRX89XfphEomkyvOrqnlzuyqvQ3WHXN6ktkMwmezsErz77hmDyq5d2xPPP1+374/Pzi6BlfXjP2IeXSaTSSGXNzJ2WE9FX5seZur2VCU2wPjx1cTYrcv729yZ02ezuWHfNmzs34aLfVs1ev+6GDJkCFxcXNC5c2e8/PLL8PHxgY+PT5UrcnR0xK1bt3TTubm5cHBwqDA/Ly8PDg4OsLe3R1FRETQaDaRSqW5+VeXnF0GrrZhQU90nlzdBXl5hbYdhMmq1BGVKtYFlNXV+3zypPVbWsgrL6nubKpY1bXuqEtuD8saLr6bGbl3e3+bM3D6bzQn7tmFj/zZc5ty3FhaSap301HtN5TvvvIN9+/bpXpMUHx+P4ODgKlfUtWtXXL16FdeuXYNGo8G+ffvg6uqKli1bwtraGmfOPDgDlpSUBFdXV1haWqJXr17Yv39/uflERERERERE1aX3TPDBgwcrzLt+/Trc3d2rVJG1tTXi4uJvrzxJAAAgAElEQVQQEhICpVIJNzc3eHp6AniQWEdEROD+/ft48cUXERgYCACIiorC/PnzsX79erRo0QKffvppleokIiIiIiIiepjeJHjz5s2631UqFTIyMtC7d2+Dk+AjR47ofndxccGePXsqlHF2dkZCQkKF+S1btixXPxEREREREdHTqFISDDw4C7x8+XKjBURERERERERkLFV+z0rr1q1x5coVY8RCREREREREZFRVuidYCIG0tDTdu3uJiIjIMBqNBZRKw95WYG0tgVSqNXJERERE5qlKl0NLJBLY29sjLi7OqEERERE1NEqlwMwZpw0qu35DL9jaGjkgIiIiM2VQEpyVlQUnJycUFRXh+vXr6NSpkyliIyIiIiIiIqpReu8J3rJlC2bNmgUAuH37NkJCQvDDDz8YPTAiIiIiIiKimqY3Cd62bRu+//57AICTkxOSkpLw7bffGj0wIiIiIiIiopqmNwnWaDSws7PTTTdp0gQSicSoQREREREREREZg94kuF27doiPj0dWVhaysrKwatUqvPDCCyYIjYiIiIiIiKhm6U2CP/roI1y7dg0jRozAmDFjkJmZiejoaBOERkRERERERFSz9D4d+rnnnsNnn31miliIiIiIiIiIjErvmWAiIiIiIiKihoJJMBEREREREZmNxybBhw4dAgCUlZWZLBgiIiIiIiIiY3psErx69WoAwPjx400WDBEREREREZExPfbBWI0bN4aHhwcUCgV8fX0rLN+7d69RAyMiIiIiIiKqaY9Ngr/44gukp6dj4cKFiIyMrLEKf/jhB2zZskU3fePGDfj5+aGkpARnzpxBo0aNAACzZ8/GsGHDkJKSgsWLF0OpVMLLywuhoaE1FgsRERER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Ffn5RdBqKybTVPfJ5U2Ql1dYo9tUqyUoU6oNLKup8fqfXF/dja06ntQeK2tZhWX1vU0Vy9bd4+dBeePFV1Njty7v7+qo6+0xND4ra1m92N9Udcb43qW6g/3bcJlz31pYSKp10lPvK5JmzpyJCxcuQAhR7qe6CgsLsXTpUiiVShQVFSExMRHLli1DamoqCgoKUFJSgoMHD8LV1RVdu3bF1atXce3aNWg0Guzbtw+urq7VrpuIiIiIiIjMm94zwSqVCmvWrKmxCgcNGoTz589jxIgR0Gq1eOONN9CzZ0+EhoYiMDAQKpUKY8aMQZcuXQAAcXFxCAkJgVKphJubGzw9PWssFiIiIiIiIjIvepPgl156CX/88Qc6duxYY5XOmTMHc+bMKTfP19cXvr6+Fcq6uLhgz549NVY3ERERERERmS+9SXCPHj0wYsQIyOVy3Xt9AeDw4cNGDYyIiIiIiIiopulNgtesWYP4+Hi0bt3aFPEQERERERERGY3eJLhp06bw9vY2RSxERERERERERqU3CX7ttdewZMkSuLu7w8rKSjf/pZdeMmpgRERERERERDVNbxK8d+9eAMCBAwd08yQSCe8JJiIiIiIionpHbxJ85MgRU8RBREREVGM0GgsolcKgstbWEkilWiNHREREdYXeJPirr76qdP6UKVNqPBgiIiKimqBUCsyccdqgsus39IKtrZEDIiKiOkNvEvzHH3/ofi8rK8OZM2fQp08fowZFREREREREZAx6k+DFixeXmy4oKMC8efOMFhARERERERGRsVhUdQV7e3tkZ2cbIxYiIiIiIiIio6rSPcFCCKSlpaF58+ZGDYqIiIiIiIjIGKp0TzAAtGjRgpdDExERERERUb1U5XuCiYiIiIiIiOqrxybB4eHhj11JIpEgNjbWKAERERERERERGctjk+AOHTpUmHf79m188803aNmypVGDIiIiIiIiIjKGxybBU6dOLTedkpKCsLAw+Pr6IiIiwuiBEREREREREdU0vfcEq9VqLF++HImJiYiOjoanp+dTV7pmzRr885//BAC4ublh3rx5CA8Px5kzZ9CoUSMAwOzZszFs2DCkpKRg8eLFUCqV8PLyQmho6FPXT0RERERERObpiUnwtWvXEBoaCltbWyQmJqJFixZPXWFKSgp+/vlnJCYmQiKR4O2338ahQ4eQlpaGLVu2wMHB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\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
765
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
766
       "<Figure size 1152x216 with 1 Axes>"
ondrejkopicka's avatar
init  
ondrejkopicka committed
767
768
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
769
     "metadata": {},
ondrejkopicka's avatar
init  
ondrejkopicka committed
770
771
772
773
774
775
     "output_type": "display_data"
    }
   ],
   "source": [
    "customer_purchases_count = purchases \\\n",
    "    .groupby(['customerid']).size() \\\n",
ondrejkopicka's avatar
ondrejkopicka committed
776
    "    .reset_index(name='number_of_purchases')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
777
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
778
    "one_time_buyers = set(customer_purchases_count[customer_purchases_count['number_of_purchases'] == 1]['customerid'])\n",
ondrejkopicka's avatar
ondrejkopicka committed
779
    "print('One-time Buyers: ', len(one_time_buyers))\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
780
781
    "\n",
    "plt.figure()\n",
ondrejkopicka's avatar
ondrejkopicka committed
782
    "plt.title('Customer segments based on the number of purchases:')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
783
    "plt.hist(\n",
ondrejkopicka's avatar
ondrejkopicka committed
784
    "    x=customer_purchases_count['number_of_purchases'],\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
785
786
787
788
    "    bins='auto',\n",
    "    color='#0504aa',\n",
    "    alpha=0.7,\n",
    "    rwidth=0.85)\n",
ondrejkopicka's avatar
ondrejkopicka committed
789
790
    "plt.xlabel('Number of purchases')\n",
    "plt.ylabel('Number of customers')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
791
792
793
794
795
796
797
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
798
    "**~1 % of our customers are one-time buyers**. This is quite a low figure. So far, it seems we will have a sufficient amount of information to represent relationships between items and customers."
ondrejkopicka's avatar
init  
ondrejkopicka committed
799
800
801
802
803
804
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
805
    "To confirm this assumption, we need to check how many customers buy multiple items, ideally, across multiple categories. If someone buys repeatedly, but only one particular item, it will tell us nothing about relationships between items."
ondrejkopicka's avatar
init  
ondrejkopicka committed
806
807
808
809
   ]
  },
  {
   "cell_type": "code",
ondrejkopicka's avatar
ondrejkopicka committed
810
   "execution_count": 13,
ondrejkopicka's avatar
init  
ondrejkopicka committed
811
812
813
814
815
816
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
ondrejkopicka's avatar
ondrejkopicka committed
817
      "One-item Buyers:  92\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
818
819
820
821
     ]
    },
    {
     "data": {
ondrejkopicka's avatar
ondrejkopicka committed
822
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8EAAADhCAYAAADoDLerAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlYVdX+P/D3gcMg4s2rHciLZGIiDjmnkiaiCTIFChZG4JSiKbfoOgCCEiagkiNJpZY3h9QUcciLevWrpag5lIg/nEER7KDgAAKHM6zfH347XxH0AHIY36/n8Xnce6+912fttdc5fM6eJEIIASIiIiIiIqImwKCuAyAiIiIiIiKqLUyCiYiIiIiIqMlgEkxERERERERNBpNgIiIiIiIiajKYBBMREREREVGTwSSYiIiIiIiImgwmwURENUCtVuP777/HqFGj4OnpCVdXVyxevBilpaXV3uZPP/2EjRs31mCUjV98fDz++9//Vrr8yZMn4e7urseIKpacnAx/f3+9bDs1NRVz584FUHfte9qkSZNw9erV55bJyspCUFBQjdWZkJCAIUOGIDQ0tMa2WRmdOnVCfn5+rdaZn5+PTp06VbjM09MTDx8+REFBAQICAmo1LiKi+kpa1wEQETUGkZGRePDgAf7973+jRYsWKCoqwowZMzBnzhwsXry4Wts8c+YMOnbsWMORNm4nT57E66+/Xtdh1KmrV69CLpfXdRhlrF69WmeZnJwcZGRk1Fid27ZtQ1xcHPr27Vtj22yIdu7cCQC4desWzp8/X8fREBHVD0yCiYheUFZWFnbv3o2jR4/C3NwcAGBmZobPP/8cv//+OwAgJCQEHTt2xMSJE8tNb9q0CZs3b4aRkRFMTEwQFRWFjIwMHDp0CMeOHYOpqSnee+89xMbG4vjx4zA0NET37t0RGhoKc3NzDB06FO7u7jh8+DDu37+PoKAgnD17FhcuXIBUKkVCQgIsLS0hl8sRFRWF27dvQ6lUws3NDVOmTMGtW7fg5+eHDh06IDs7G+vXr4eFhYW2ffv370dCQgIkEgkMDQ0xa9YsvPnmmygoKMCCBQtw+fJlKJVK2NvbY9asWZBKpThy5Aji4uJgYGCAzp07IyUlBZs2bcJvv/2G/fv3o6SkBNnZ2WjTpg38/PywYcMGZGZmYvz48ZgwYQKAx2fCf/zxR2g0GrRs2RIRERHo0KEDQkJCYG5ujkuXLuHPP/+EjY0NlixZgqSkJKSlpWHRokUwNDTE3//+d8TGxkKj0QAAAgMD4ezsXK7/ioqK8M9//hM3btzA3/72N0RFRaF9+/bIyMhAVFQUioqKkJubCzs7OyxbtgwmJiZYsWIFDhw4ACMjI/z9739HTEwMLCwscO3aNSxYsAD379+HWq2Gv78/fHx8AADLly/H7t270bJlS7Rr1+6Zx9OWLVuwfv16GBgY4OWXX0ZERATat2//zHY3b95cu+7t27exYsUKFBQUIDQ0FF5eXigqKkJwcDCuX78OhUKBL774An379kVpaSni4uJw6tQpqNVqdOnSBeHh4dpjGAA0Gg0cHR0RHx+PN954AwAQHByMN998E05OTpg7dy7y8vJw584dWFlZYdmyZWjdujWGDh2K7t2749KlS/jss88QExOD5cuX44033sChQ4eQkJAApVIJU1NTzJ49G927d0d4eDjkcjkmTpyIvn374urVq/jyyy8BPP5BaP78+UhKSiqzr/78809ERkYiOzsbQgh4eXnho48+wqeffgq5XI45c+bgk08+gaurq3adxMRE/Pzzz9BoNJDL5bC0tERsbCwsLS3h7+8PPz8/jBgxAgDKTHfr1g3Dhg3DxYsXERcXB41Ggy+++ALFxcUwMjLCrFmzYG9vDwBYuXIlzp07h/v372PixInw8/NDUVERIiMjkZmZiQcPHqB58+aIi4uDjY1NtcbY/v37sXTpUjRr1gzdunV75vHUqVMnHD9+HKGhoSgpKYGnpycSExORmZlZ4bF68uRJLFmyBBYWFrhy5QqaNWuGoKAgrF+/HhkZGXByckJYWBgePXqE0NBQ3LhxAwYGBujatSuioqJgYGCASZMmwdfXF8OGDXtmXEREdUoQEdELSU5OFt7e3s8tM3v2bLFmzZpy0yqVSnTt2lXI5XIhhBA7duwQmzdvLrfO8uXLxfTp00VpaalQq9UiJCRERERECCGEcHR0FNHR0UIIIX7++WdhZ2cn0tPThRBCfPzxxyIhIUEIIYS/v784ePCgEEKIkpIS4e/vL37++WeRlZUlbG1txalTpyqMfdiwYeL3338XQgjx66+/ipUrVwohhAgJCRE//PCDEEIIlUolZsyYIb799luRn58v+vXrp40hMTFR2NraiqysLLF9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qRSWlpa4e/eudt07d+5oL62urLy8Qmg0olqxUt2SyVrgzp2Cug6DqkmlkqBUUfGD7IxNpOWWqVTqet/fz2tT+bK1256qxPa4vP7i49ht3Ni/jRf7tnFj/zZeTblvDQwk1TrpqTMJnjJlCh4+fIi2bdtq50kkkmolwYWFhZg4cSKCg4Ph6empnW9qaorFixejf//+aNu2LTZu3Ijhw4fDysoKJiYmOHPmDPr06YOkpCQMHjy4yvUSERERERERAZVIguVyOfbu3Vvly5Arsm3bNty9exffffcdvvvuOwDA0KFD8cknnyAqKgpTp06FUqlE7969MX78eABAXFwcwsPD8ejRI3Tp0gUBAQEvHAcRERERERE1TTqTYFtbW9y9e7fMA6qq6tChQwCAcePGYdy4cRWWcXZ2hrOzc7n5dnZ22LZtW7XrJiIiIiIiIvqLziR4xIgRcHFxga2tLaTS/yv+ww8/6DUwIiIiIiIiopqmMwlevHgxAgMD8eqrr9ZGPERERERERER6ozMJbt68OSZNmlQbsRAREWmp1QZQKCr3dH8TEwkMDTV6joiIiIgaA51JsKOjo/ZpzcbGxtr5LVu21GtgRETUtCkUAlOnnK5U2YSv+8LMTM8BERERUaOgMwlet24dSktLMX/+fO08iUSC9PR0vQZGREREREREVNN0JsGpqam1EQcRERERERGR3ulMgjUaDdauXYtffvkFKpUKAwcOxJQpU8o8KZqIiIiIiIioITDQVeDLL7/EiRMnMHbsWIwfPx6///47Fi5cWBuxEREREREREdUonadzf/31V2zfvh1GRkYAgCFDhuDdd9/Ve2BERERERERENU3nmWAhhDYBBgBjY+My00REREREREQNhc4k2M7ODtHR0bh58yZu3ryJmJgY2Nra1kZsRERERERERDVKZxI8b948PHz4EL6+vnjvvfeQn5+PuXPn1kZsRERERERERDVK5z3BJ06cQGxsbJl5SUlJ8PLy0ltQRERERERERPrwzCT40KFDUKlUWLRoEYQQEEIAAFQqFZYuXcokmIiIiIiIiBqcZybB6enpOHHiBPLy8vDDDz/83wpSKSZOnFgrwRERERERERHVpGcmwdOmTcO0adOwceNG+Pn5VWvjhYWF8PX1xddff422bdsiJSUFMTExUCgUcHFxQXBwMIDHCXd4eDgKCwvRt29ffP75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\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
823
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
824
       "<Figure size 1152x216 with 1 Axes>"
ondrejkopicka's avatar
init  
ondrejkopicka committed
825
826
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
827
     "metadata": {},
ondrejkopicka's avatar
init  
ondrejkopicka committed
828
829
830
831
832
833
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
ondrejkopicka's avatar
ondrejkopicka committed
834
      "One-category Buyers:  175\n"
ondrejkopicka's avatar
init  
ondrejkopicka committed
835
836
837
838
     ]
    },
    {
     "data": {
ondrejkopicka's avatar
ondrejkopicka committed
839
      "image/png": "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pAl27doFHx8fNG7cGBYWFkhKSkK3bt0QFxcHJyenF46DiIiIiIiITJNhrmcrg729PT7//HMMHjwYarUaLi4u8PDwAABERUUhMDAQSqUSzs7Oukuko6OjERISgocPH6Jdu3YICAiozpCJiIiIiIjoFVItRfD+/ft1P/v7+8Pf37/UOg4ODtixY0epdnt7e2zZssWg8REREREREZFp0PsVSdOnT6+OOIiIiIiIiIgMTm8RfOHChWc+pZmIiIiIiIjoZaP3cmiFQgF3d3d06tQJderU0bWHhIQYNDAiIiIiIiKiqqa3CO7SpQu6dOlSHbEQERERERERGZTeInjixIkoKipCeno6WrVqBZVKhVq1alVHbERERERERERVSu89wWfOnMEHH3yAMWPGIDs7G87Ozjh9+nR1xEZERERERERUpfQWwfPnz8cvv/yCevXqoWHDhliwYAEiIiKqIzYiIiIiIiKiKqW3CC4qKkLLli11y87OztBoNAYNioiIiIiIiMgQ9BbBcrkc9+/fh0QiAQBcu3bN4EERERERERERGYLeB2ONGzcOQ4cORU5ODr788kscOXIE4eHh1REbERERERERUZXSWwT37t0bdnZ2OHLkCLRaLcaPH1/i8mgiIiIiIiKil4Xey6EBQK1WQ6vVQi6Xw8zMzNAxERERERERERmE3iJ469atGDZsGM6dO4ekpCT4+/tj9+7d1REbERERERERUZXSezn0L7/8gri4OFhbWwMAbt68iTFjxsDV1dXgwRERERERERFVJb0zwWZmZroCGAD+3//7f7wkmoiIiIiIiF5KZRbB58+fx/nz59GmTRuEh4fj4sWLuHLlChYsWICuXbuWq/P8/Hx4eHjgxo0bAIDExER4enrCxcUFixcv1q2XkpICHx8fuLq6YtasWVCr1QAezTr7+/vDzc0N48aNw8OHD19kX4mIiIiIiMjElVkEBwYGIjAwEMePH8eBAwcwbtw4fP7550hISMB//vMfvR2fOXMGgwcPRlpaGgCgqKgIwcHBWLFiBeLj45GcnIyDBw8CAKZNm4bQ0FDs3r0bQghs2rQJADB37lwMGTIECQkJ6NChA1asWFEFu0xERERERESmqsx7gvfv3/9CHW/atAlhYWGYPn06AODs2bNo1qwZbG1tAQCenp5ISEhAy5YtUVRUhM6dOwMAvL29sXTpUnz00Uc4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\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
840
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
841
       "<Figure size 1152x216 with 1 Axes>"
ondrejkopicka's avatar
init  
ondrejkopicka committed
842
843
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
844
     "metadata": {},
ondrejkopicka's avatar
init  
ondrejkopicka committed
845
846
847
848
849
850
851
852
853
854
855
     "output_type": "display_data"
    }
   ],
   "source": [
    "customer_purchases_items = purchases \\\n",
    "    .groupby(['customerid', 'itemid']).size() \\\n",
    "    .reset_index(name='counts') \\\n",
    "    .groupby(['customerid']).size() \\\n",
    "    .reset_index(name='item_variety_counts')\n",
    "\n",
    "one_item_buyers = set(customer_purchases_items[customer_purchases_items['item_variety_counts'] == 1]['customerid'])\n",
ondrejkopicka's avatar
ondrejkopicka committed
856
    "print('One-item Buyers: ', len(one_item_buyers))\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
857
858
    "\n",
    "plt.figure()\n",
ondrejkopicka's avatar
ondrejkopicka committed
859
    "plt.title('Customer segments based on the variety of purchased items:')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
860
861
862
863
864
865
    "plt.hist(\n",
    "    x=customer_purchases_items['item_variety_counts'],\n",
    "    bins='auto',\n",
    "    color='#0504aa',\n",
    "    alpha=0.7,\n",
    "    rwidth=0.85)\n",
ondrejkopicka's avatar
ondrejkopicka committed
866
867
    "plt.xlabel('Number of different items')\n",
    "plt.ylabel('Number of customers')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
868
869
870
871
872
873
874
875
876
877
    "plt.show()\n",
    "\n",
    "\n",
    "customer_purchases_categories = purchases \\\n",
    "    .groupby(['customerid', 'categoryid']).size() \\\n",
    "    .reset_index(name='counts') \\\n",
    "    .groupby(['customerid']).size() \\\n",
    "    .reset_index(name='category_variety_counts')\n",
    "\n",
    "one_category_buyers = set(customer_purchases_categories[customer_purchases_categories['category_variety_counts'] == 1]['customerid'])\n",
ondrejkopicka's avatar
ondrejkopicka committed
878
    "print('One-category Buyers: ', len(one_category_buyers))\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
879
880
    "\n",
    "plt.figure()\n",
ondrejkopicka's avatar
ondrejkopicka committed
881
    "plt.title('Customer segments based on the variety of purchased item categories:')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
882
883
884
885
886
887
    "plt.hist(\n",
    "    x=customer_purchases_categories['category_variety_counts'],\n",
    "    bins='auto',\n",
    "    color='#0504aa',\n",
    "    alpha=0.7,\n",
    "    rwidth=0.85)\n",
ondrejkopicka's avatar
ondrejkopicka committed
888
889
    "plt.xlabel('Number of different item categories')\n",
    "plt.ylabel('Number of customers')\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
890
891
892
893
894
895
896
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
897
    "We can see that there is the same number of one-time buyers and one-item buyers. This means that all the other customers purchased different items in their respective purchases. The distribution across items is almost identical with the distribution across the number of purchases. This suggests that **our customers almost never buy the same item twice**.\n",
ondrejkopicka's avatar
init  
ondrejkopicka committed
898
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
899
    "Similarly, for item categories. **Almost no customers buy from the same category twice**. This is good news for us because it means we will be probably able to capture some relationships between the items and customers."
ondrejkopicka's avatar
init  
ondrejkopicka committed
900
901
   ]
  },
ondrejkopicka's avatar
ondrejkopicka committed
902
903
904
905
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
ondrejkopicka's avatar
ondrejkopicka committed
906
    "The last thing we will examine is **distribution across customer features**. We need to see how much data we have for different user segments. This information will tell us whether we can use the same model for all customers. If some customer segments are underrepresented, it may be better not to use the model for them. In this template, we will analyze only one customer feature - `sexid`. The analysis of the remaining values is up to you :)"
ondrejkopicka's avatar
ondrejkopicka committed
907
908
   ]
  },
ondrejkopicka's avatar
init  
ondrejkopicka committed
909
910
  {
   "cell_type": "code",
ondrejkopicka's avatar
ondrejkopicka committed
911
   "execution_count": 14,
ondrejkopicka's avatar
ondrejkopicka committed
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
   "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>sexid</th>\n",
ondrejkopicka's avatar
ondrejkopicka committed
936
       "      <th>number_of_purchases_overall</th>\n",
ondrejkopicka's avatar
ondrejkopicka committed
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>4961</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>5029</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
ondrejkopicka's avatar
ondrejkopicka committed
955
956
957
       "   sexid  number_of_purchases_overall\n",
       "0      0                         4961\n",
       "1      1                         5029"
ondrejkopicka's avatar
ondrejkopicka committed
958
959
      ]
     },
ondrejkopicka's avatar
ondrejkopicka committed
960
     "execution_count": 14,
ondrejkopicka's avatar
ondrejkopicka committed
961
962
     "metadata": {},
     "output_type": "execute_result"
ondrejkopicka's avatar
ondrejkopicka committed
963
964
965
966
967
968
969
970
971
972
    },
    {
     "data": {
      "image/png": "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MXXqVAwePBhHjhyB0WiE1Wq1u/6+fftiy5YttpW8v//+e/j5+aFRo0YYP348zp49izFjxmD+/PnIz89HXl7eTc9f72b133XXXdi/fz/i4uIAAHv27MHIkSNhMBiQkpKCBQsW4LPPPkPTpk3x9ttv22pcu3YtCgsLAZStQv7iiy/CbDZj8ODBKC4uxoQJEzB37lzExcXZ/feciIgcjz2+RERkt9LSUowaNQpAWW+sVqvF9OnTMXDgwHLXtW7dGhERERg7diw8PDyg0+lsvb2DBg3Cm2++aVdPbXJyMu6//35IkoR3330Xfn5+6NOnD7p3746IiAgEBQWhZ8+etlDduXNnLF26FM8++ywmTpxoe86cOXPw+uuvY8SIETCZTOjXrx+efvppu993QEAA3nvvPcyfPx+lpaWQJAmLFi1CkyZNkJKScst7dTodHn74YeTn52PYsGG2YbJz5szBvHnz4OPjg969eyMoKKjC+1u1aoUZM2Zg0qRJAICgoCAsXLgQCQkJN21z2rRpePbZZ+Hr6wu9Xo/u3bsjKSkJDz74YIXfF41Ggw8//BALFizAJ598ArPZjOeffx5du3ZFeHg4jhw5gvvuuw96vR7169cv92d7rcaBAwciIiICPj4+aNiwIZo3b47ExET069fPrvr79OmDxx9/HI899hisVisCAgKwYsUKyLKMF154AQsXLsTSpUshyzL++c9/okGDBjc9f73777+/wvp9fX0xb948TJ8+3TaaYPny5dBoNPi///s/PPnkk2jZsiX+/e9/Y8SIEejduzcefPBBZGRkYNy4cZAkCSEhIXjjjTegUqnw8ssv44UXXrCNSli4cCE0Gs0t/24QEVH1kURFY4uIiIjojl2/yjURERE5D4c6ExERERERUY3GHl8iIiIiIiKq0djjS0RERERERDUagy8RERERERHVaAy+REREREREVKMx+BIREREREVGNViP38b1ypQhWK9fsIiIiIiIiqklkWYK/v2el76uRwddqFQy+REREREREBIBDnYmIiIiIiKiGY/AlIiIiIiKiGq1GDnUmIiIiIiKiP1gsZly5kgWz2ejsUuwiywr0ei94eflCkqQ7fh6DLxERERERUQ135UoWdDoPeHrWq5Ig6UhCCFgsZhQUXMWVK1kICAi+42dyqDMREREREVENZzYb4enp4/KhFwAkSYJKpYafXyCMxtIqeSaDLxERERERUS3gDqH3epIkA6ia3XoYfImIiIiIiKhGY/AlIiIiIiKiKrFlyw/Ys2fXDeeffPJRpKenOaGiMlzcioiIiIiIiKrEffeNcHYJFWLwJSIiIiIiIpvk5CQsXPgaFEWB2WzGnDmv4aeffsSxY0cghMC99w7H6NEPYO7cWWjbtj3GjBmH556bgscfn4SYmNPw8/PD6NEP4p133sCFC+cQFFQX+fn5Tn1PDL5ERERERERkc+TIIbRp0w7/+MdzOHMmGlFR2xEXF4vlyz+FxWLBc89NRteu3fHSS3Pw9NNP4MyZGPTocRd69uyFmJjTAIC9e3cjLy8PH3/8JfLz8zFhwminvifO8SUiIiIiIiKbyMhR8PLywgsv/AurV38Fi8WCS5fi8NxzUzB16jMoLi5GSkoyPDw8MXLkaOzf/wvGjn2o3DMSExPQpk07AICPjw+aNGnmjLdiw+BLRERERERENr/8sgvt2rXH0qUfYvToB7FmzTfo0KETPvhgJT74YCXuuScCzZo1x+XL6diwYR0mT34Gixe/Xu4ZjRs3tfX+FhUVIjExwQnv5A8c6kxEROTGzGYzjEYDPDw8nV0KERHVEOHhbbFgwav48svPYbFYsHDhWzh0aD/+8Y8nYTCUokOHzggICMRzz03Bc89N+32IczS+//5b2zP69RuAX389hkmTJqJOnToICAhw4jsCJCFE1ewI7EJycgphtda4t0VERHSDDz98D+fOnsH7/1np7FKIiMiFXb6ciHr1Gjm7jEr7c92yLCEw0KvSz2GPLxERkRs7duyws0sgIiJyeZzjS0RERERERDUagy8RERERERHVaAy+REREREREVKMx+BIREREREVGNxuBLRERUA1itVmeXQERE5LK4qjMREVENYLGYIcsaZ5dBRERu4o3Fb+DK1bwqf66/ny9mvjizyp97pxh8iYiIagCTyQy1msGXiIjsc+VqHkr9e1X9c68ctOu67dt/wpdffgqTyYRx4x7G2LHjqryW6zH4EhER1QBms8nZJRAREdklKysTH3/8IT79dBXUag2efvoJdOnSDU2aNHVYm5zjS0REVAOYTAy+RETkHo4dO4IuXbrBx8cXer0egwYNwe7dUQ5tk8GXiIioBmDwJSIid5GdnYXAwDq248DAOsjMzHRomwy+REREbkxRFAAc6kxERO5D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5EgMvkRERE5itVqxcuUy5F29Cm393pAUrVPq0Egy7vP0gtZixZJ330R2dpZT6iAiInIUBl8iIiInWbduDc6ciYambhco+gCn1uIpK7jP0wuGokIsefcN5OfnO7UeIiKiqsTgS0RE5AQ7d+7Ali2boPZrBrVfM2eXAwAIUFS418MbWRmX8fbbC1BYWOjskoiIiKoEgy8REVE1O378KL766r9QedWHtl5XSJLk7JJs6qvVuNfTG+mpKXjn7YUoLi5ydklERER3jMGXiIioGl28eAErVnwARR8AXWhvSJLrfRSHqTUY5umN5OREvPPOIpTKf4XHAAAgAElEQVSUFDu7JCIiojviep+2RERENVROTjbef/8dCEUHXYP+kGSVs0u6qUZqDe7x8EJiQjyWL38fFovF2SURERHdNgZfIiKiamAwGPD++++guKQU2tC+kFXOWcG5MppotOin90RMzGmsXr3K2eUQERHdNgZfIiIiBxNC4LPPViA5ORHakLugaH2dXZLd2mh16KjVIypqO6Kitju7HCIiotvC4EtERORge/bsxNGjh6AJ6gCVd6izy6m0u/QeaKTW4Jv/fYHz5886uxwiIqJKY/AlIiJyoMzMDKxe/RUUz7rQBIY7u5zbIksS7vb0hres4NNPlsNgKHV2SURERJXC4EtEROQgVqsVn3yyHGaLgC6kh0ttW1RZaknCQL0nsnOysW7dd84uh4iIqFIYfImIiBxk69YfcPHiBWjqdoas9nR2OXesvlqNtlodft6xFRcvXnB2OURERHZj8CUiInKA8+fPYt26NVD5NITKp7Gzy6kyd+k94KUo+OTjD1FayiHPRETkHhh8iYiIqlh+fh6WL38fssYLunrd3XqI859pJBmD9J7IzMrEt99+5exyiIiI7MLgS0REVIUMBgOWL/8PCgoLoa3fG5KidnZJVS5UrUEnrR579uzEiRPHnV0OERHRX3J48C0sLERkZCRSUlIAAN9++y0iIyMxYsQIzJo1C0aj8YZ7NmzYgL59+2LUqFEYNWoUlixZ4ugyiYiI7lhhYQHeemsBzp//Ddq63aDo/J1dksP00HugjkqFzz/7COnpqc4uh4iI6JbsCr5xcXH47rvvIITAM888gyFDhuDQoUN/ed+pU6cwYcIEJCQkAADi4+Px6aefYvXq1di0aROsViv+97//3XBfdHQ0Zs6c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\n",
      "text/plain": [
       "<Figure size 1152x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
ondrejkopicka's avatar
ondrejkopicka committed
973
974
975
976
977
    }
   ],
   "source": [
    "customer_purchases_sex = purchases \\\n",
    "    .groupby(['customerid', 'sexid']).size() \\\n",
ondrejkopicka's avatar
ondrejkopicka committed
978
979
980
    "    .reset_index(name='number_of_purchases')\n",
    "\n",
    "customer_purchases_sex_overall = customer_purchases_sex \\\n",
ondrejkopicka's avatar
ondrejkopicka committed
981
    "    .groupby(['sexid']).size() \\\n",
ondrejkopicka's avatar
ondrejkopicka committed
982
    "    .reset_index(name='number_of_purchases_overall')\n",
ondrejkopicka's avatar
ondrejkopicka committed
983
    "\n",
ondrejkopicka's avatar
ondrejkopicka committed
984
985
986
987
988
989
990
991
992
993
994
995
996
    "customer_purchases_sex['number_of_customers'] = \"\"\n",
    "\n",
    "sns.set(rc={'figure.figsize':(16, 7)})\n",
    "sns.violinplot(\n",
    "    x=\"number_of_customers\",\n",
    "    y=\"number_of_purchases\",\n",
    "    hue=\"sexid\",\n",
    "    data=customer_purchases_sex,\n",
    "    palette=['b','r'],\n",
    "    split=True\n",
    ").set_title('Distribution of purchases across sexes')\n",
    "\n",
    "customer_purchases_sex_overall"
ondrejkopicka's avatar
ondrejkopicka committed
997
998
999
1000
   ]
  },
  {
   "cell_type": "markdown",
For faster browsing, not all history is shown. View entire blame