コンペチュートリアル データハンドリング 前処理 可視化 機械学習 自然言語

kaggle:メルカリ チュートリアル(EDA探索的データ解析)

投稿日:

概要説明

本記事は、機械学習を始めて基本的な操作を覚え、次に精度を上げるために何をすればよいのか?という悩みを持つ方たちのために、機械学習のコンペサイトkaggleの練習問題をベースに事例を紹介していきたいと思います。

本記事では、kaggleのThyKhueLyさんのスクリプトを参考にしています。

このコンペは、アメリカのメルカリに出展されている、出展商品の情報から適正価格を予測するコンペです。
このカーネルは、商品の説明文に対してもNLPの手法を用いて解析しているので、NLP活用の参考にもなると思います。

データ探索の流れ

  1. データ探索
  2. テキスト解析
    • tf-idfによる単語のベクトル化
    • t-SNEによる可視化
    • K-meansによるクラスタリング
    • LDA/トピックモデルによる可視化

ライブラリインポート

データ読み込み

kaggleでは、trainデータで学習し、testデータについて予測を行い、その予測の精度がどれだけ高いかを競います。データについては、こちらからダウンロードしてください。

train_idnameitem_condition_idcategory_namebrand_namepriceshippingitem_description
00MLB Cincinnati Reds T Shirt Size XL3Men/Tops/T-shirtsNaN10.01No description yet
11Razer BlackWidow Chroma Keyboard3Electronics/Computers & Tablets/Components & P…Razer52.00This keyboard is in great condition and works …
22AVA-VIV Blouse1Women/Tops & Blouses/BlouseTarget10.01Adorable top with a hint of lace and a key hol…
33Leather Horse Statues1Home/Home Décor/Home Décor AccentsNaN35.01New with tags. Leather horses. Retail for [rm]…
4424K GOLD plated rose1Women/Jewelry/NecklacesNaN44.00Complete with certificate of authenticity

目的変数

目的変数である価格の分布について確認する。
中央値は267ドル、25パーセンタイルは100ドル、75パーセンタイルは2009ドルで、大きく左に歪んでいる。よって、対数変換により正規分布に近づける。対数変換は、ゼロを避けるため+1してから実行する。

正規分布に近づき、歪みが改善できている。

送料

送料込みの比率は全体の約55%、送料込みの比率は約45%程度。 送料込みか否かで価格の分布を比較すると、送料込の方が価格が高い事がわかる。これは、一般的な感覚とも一致する。

plt.figure(figsize=(14,6))
plt.hist( np.log(train[train.shipping==1].price + 1), bins=50, alpha=0.5, label=’shipping’)
plt.hist( np.log(train[train.shipping!=1].price + 1), bins=50, alpha=0.5, label=’no-shipping’)
plt.legend()
plt.show()

アイテムカテゴリ

カテゴリは全部で1,287存在し、メイン/一般カテゴリ/サブカテゴリ(例:Beauty/Makeup/Face or Lips)のように記述されている。カテゴリがついていないアイテムも6,327存在する。

カテゴリについては、「/」でsplitして3つのカラムに分割。 また、brand_nameの欠損値をいかに補完するかが予測モデルに大きな影響を与えると考えられる。

train_idnameitem_condition_idcategory_namebrand_namepriceshippingitem_descriptiongeneral_catsubcat_1subcat_2
00MLB Cincinnati Reds T Shirt Size XL3Men/Tops/T-shirtsNaN2.3978951No description yetMenTopsT-shirts
11Razer BlackWidow Chroma Keyboard3Electronics/Computers & Tablets/Components & P…Razer3.9702920This keyboard is in great condition and works …ElectronicsComputers & TabletsComponents & Parts
22AVA-VIV Blouse1Women/Tops & Blouses/BlouseTarget2.3978951Adorable top with a hint of lace and a key hol…WomenTops & BlousesBlouse
33Leather Horse Statues1Home/Home Décor/Home Décor AccentsNaN3.5835191New with tags. Leather horses. Retail for [rm]…HomeHome DécorHome Décor Accents
4424K GOLD plated rose1Women/Jewelry/NecklacesNaN3.8066620Complete with certificate of authenticityWomenJewelryNecklaces

カテゴリごとの価格の分布を見るとどのカテゴリでもきれいに分布しており、特筆すべきカテゴリは確認できない。

ブランド

アイテム説明

非構造化データであるアイテム説明のタグ付を行う。
アイテムの説明文が充実している方が、入札価格が高くなる傾向があるかもしれない。
文字数をカウントするため、
全ての句読点、ストップワード(a,theなど冗長な単語)および長さ3未満の単語を削除。


train_id
nameitem_condition_idcategory_namebrand_namepriceshippingitem_descriptiongeneral_catsubcat_1subcat_2desc_len
00MLB Cincinnati Reds T Shirt Size XL3Men/Tops/T-shirtsNaN2.3978951No description yetMenTopsT-shirts1
11Razer BlackWidow Chroma Keyboard3Electronics/Computers & Tablets/Components & P…Razer3.9702920This keyboard is in great condition and works …ElectronicsComputers & TabletsComponents & Parts14
22AVA-VIV Blouse1Women/Tops & Blouses/BlouseTarget2.3978951Adorable top with a hint of lace and a key hol…WomenTops & BlousesBlouse8
33Leather Horse Statues1Home/Home Décor/Home Décor AccentsNaN3.5835191New with tags. Leather horses. Retail for [rm]…HomeHome DécorHome Décor Accents14
4424K GOLD plated rose1Women/Jewelry/NecklacesNaN3.8066620Complete with certificate of authenticityWomenJewelryNecklaces3

単語数ごとの平均価格を集計しプロット

単語数が30個付近をピークにして下降していく傾向で、単語数との価格には非線形な関係がありそう。 80単語以上の領域については、データが少ないためばらついていると考えられる。

アイテム説明に欠損値がある場合、学習データから削除しておく。

前処理 tokenization

自然言語処理で最初に行う処理は、テキストを標準化するための文書のトークン化。
具体的には、以下3つのステージを含む

  • 文章を形態素解析
  • 不要誤削除(ストップワードや句読点を削除)
  • トークンを小文字化

※3文字以上の単語のみを考慮することとする

中身を確認してみると、うまくトークン化できていることがわかる。

WordCloudパッケージを使って、カテゴリごとのトークンの出現頻度を可視化する

前処理 tf-idf

tf-idfは、用語頻度(tf)、逆文書頻度(idf)の略で文書、コーパスの語彙の集計と比較して、特定の単語の重要性を定量化する手法。
値はtf値とidf値の積で求められる

  • tf:各文書においてその単語の出現頻度
  • idf:全文書に対するその単語が出現する文書数

考え方:頻出する単語は重要度が高いと考えられるが、全ての文書に頻出(’a’, ‘the’, is’など)している場合、重要とは言えない。そのため、全文書に出現している単語にはペナルティ(idf)をかける。

詳細な説明はこちらのサイト

vzはtf-idfマトリクス

  • 行:discriptionの総数
  • 列:discription全体のトークン総数

tf-idf値の小さなトークン10個を示す。一般的な単語ばかりで、この単語からdiscriptionの内容を想像するのは難しい。

tfidf
new2.175653
size2.330674
brand2.755660
condition2.799306
brand new2.874418
free2.903426
shipping3.070592
worn3.107882
used3.165310
never3.276901

逆に、tf-idfの高いトークン10個を示す。discriptionの特徴を示す単語が抽出できている。

tfidf
postnatal13.195054
subdrip rda13.195054
lmt13.195054
lbs length13.195054
place step13.195054
light volts13.195054
thumb point13.195054
wedgwood13.195054
novelty bill13.195054
colour brow13.195054

tf-idf行列は高次元であるため、処理を効率化するためにも次元を圧縮する。特異値分解(SVD)がよく使用される。
また、語彙の視覚化のため、t-SNEを使用して次元を2次元にまで削減する。(t-SNEは次元を2または3次元に圧縮するのに適している)

t-SNE

t-SNEは高次元のデータセットの次元を圧縮し可視化するのに適した手法。 手法の詳細はこちらのサイトに委ねる。 t-SNEは非常に複雑なため、通常は、t-SNEを適用する前に前処理として次元圧縮手法を使用する。

SVDを使用してn_components=30に圧縮しておく。

t-SNEの実行

これでデータを2次元に圧縮することができたので、散布図で可視化してみる

圧縮後のデータをデータフレーム化し集計に必要な属性を付け直す。

discriptionが二次元に圧縮され、かつ分類大まかにクラスターが確認できる。

K-Means Clustering

K-meansを使ってdiscriptionをクラスタリングする

LDA

LADは文書のトピックを見つけるためのアルゴリズムで、 文書の背後に複数のトピックが存在し、そのトピックに基づいて単語が生成されると考えるモデル。参考URL

BoWをインプットとするので、行は文書、列は単語のマトリクスとなる。

-コンペチュートリアル, データハンドリング, 前処理, 可視化, 機械学習, 自然言語

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ハイパーパラメータの調整(分類器)

分類問題用にk-NN、SVM、ランダムフォレストの3つの手法及び各手法のハイパーパラメータを最適化するランダムサーチ、グリッドサーチのサンプルスクリプトです。 Contents1 データセット作成1. …

no image

python lambda/list/list内包表記の使い方まとめ

pythonのlmadaとlist、list内包表記の使い方を一覧にまとめておきます。 Contents1 lambda2 listとlambdaの組み合わせ3 list内包表記 lambda 基本形 …

no image

ボストン住宅価格 〜決定木〜

Contents1 線形回帰とは1.1 基本的なデータ探索について1.2 学習曲線について1.3 グリッドサーチについて1.4 グリッドサーチの使いこなし 線形回帰とは 線形回帰複数の変数における相関 …

no image

python/基礎/メソッド,関数,インスタンス

pythonでは値に対する処理方法として、メソッド、関数、インスタンスの3つがある。 メソッドと関数はと関数は機能としては同じだが、記述法が異なる。 関数:関数(処理対象)例)max([1,2,3]) …

no image

python/matplotlib/subplot(グラフの複数表示)

サブプロットを使うことで複数のグラフを並べて表示する事ができる。 Contents1 データ取得2 メソッド3 手順 データ取得 必要なモジュールのインポート [crayon-5da9b7ea18dd …