Kaggle Inclass и отдельная ссылка для участия. Недавно на чеках появились QR коды. Пока еще не все с этим знакомы, но по информации из этого кода можно получить полное содержание чека. Это дает возможность вести расходы, учитывая каждый отдельный товар, включая расходы, сделанные наличными. Как следствие наличия полной информации, можно анализировать изменения характера расходов и инфляцию по собственной продуктовой корзине. Названия товаров не стандартизованы: у одного товара в разных магазинах существенно отличаются названия; отдельные слова могут сокращаться; названия могут содержать опечатки. В магазины постоянно добавляются новые товары. Это делает простое составление каталога всех товаров с категориями нереалистичным.
Данные публикуются впервые, а обученные на них модели используются в production. Задача, которую предлагается решить — это разбиение всех покупок чека по небольшому набору понятных человеку категорий.
import os
import pandas as pd
import numpy as np
PATH_TO_DATA = 'data'
train = pd.read_csv(os.path.join(PATH_TO_DATA, 'train.csv.gz'), encoding='utf-8')
train.fillna('', inplace=True)
train.head()
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcdefaults()
plt.rcParams['font.family'] = 'fantasy'
plt.rcParams['font.fantasy'] = 'Arial'
categories = train.groupby('category').count()['check_id']
categories = categories.sort_values(ascending = False)
plt.figure(figsize = (16, 10))
plt.title(u'Число товаров по категориям')
categories.plot(kind='bar');
checks = pd.read_csv(os.path.join(PATH_TO_DATA, 'train_checks.csv.gz'))
checks.head()
shops = checks.groupby('shop_name').count()['check_id']
shops = shops.sort_values(ascending = False)[:15]
plt.figure(figsize = (16, 10))
plt.title(u'Число чеков по магазинам')
shops.plot(kind='bar');
plt.figure(figsize = (16, 10))
plt.title(u'Число чеков по магазинам')
_ = plt.hist(checks['sum'], bins = 20, range = [0, 10000], log=True);