日本最大的社区购物应用Mercari遇到了一个问题。他们希望向卖家提供定价建议,但这很难,因为他们的卖家能够在Mercari上放置任何东西。
在这个机器学习项目中,我们将建立一个自动建议正确的产品价格的模型。我们提供以下信息:
train_id – 列表的ID
name – 列表的标题
item_condition_id – 卖方提供商品的情况
category_name – 种类的列表
brand_name – 品牌名称
price – 该商品的售价。也就是我们预测的目标变量
shipping - 如果运费由卖方支付,买方支付0
item_description – 商品的完整描述
EDA
数据集可以从Kaggle下载(文末链接)。为了验证结果,我只需要train.tsv。让我们开始吧!
import gc
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.sparse import csr_matrix, hstack
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import mean_squared_error
import lightgbm as lgb
df = pd.read_csv('train.tsv', sep = '\t')
随机将数据拆分为训练集和测试集。我们只对EDA使用训练集。
msk = np.random.rand(len(df)) < 0.8
train = df[msk]
test = df[~msk]
train.shape, test.shape
((1185866, 8), (296669, 8))
train.head()
train.info()
价格
train.price.describe()
物品价格总体左倾(left skewed),绝大多数物品售价10-20。然而,最昂贵的商品定价在2009。所以我们会对价格进行对数变换。
plt.subplot(1,2,1)
(train ['price'])。plot.hist(bins = 50,figsize =(12,6),edgecolor ='white',range = [0,250])
plt .xlabel('price',fontsize = 12)
plt.title('Price Distribution',fontsize = 12)
plt.subplot(1,2,2)
np.log(train ['price'] + 1).plot.hist(bins = 50,figsize =(12,6),edgecolor ='white')