【ウーバーイーツ】自己組織化マップを使ってみたが、【沖縄市】

ウーバーイーツ×沖縄市

ウーバーイーツ】自己組織化マップを使ってみたが、【沖縄市

本を読んでいたところ、以下の文章を見つけた。

自己組織化マップ (SOM:Self-Organizing Map)はコホネン(T,Kohonen)により提案されたニューラルネットワークアルゴリズムで、高次元データを2次元平面上へ非線形射影するデータ解析方法である。

Rによるデータサイエンス(第2版)

高次元データを2次元に変換するという文面から、今までやってきた主成分分析や因子分析に似た分析方法と予想できる。

しかし、実際にやってみたところ、よく分からない結果になってしまった。反省の意味も込めて、書き留めておく。

参考書籍・資料

Rによるデータサイエンス(第2版):データ解析の基礎から最新手法まで | 金 明哲 |本 | 通販 - Amazon.co.jp
Amazonで金 明哲のRによるデータサイエンス(第2版):データ解析の基礎から最新手法まで。アマゾンならポイント還元本が多数。金 明哲作品ほか、お急ぎ便対象商品は当日お届けも可能。またRによるデータサイエンス(第2版):データ解析の基礎から最新手法までもアマゾン配送商品なら通常配送無料。

主な参考箇所 10 自己組織化マップ

概要

扱うデータの確認

自己組織化マップを作成する

使用するデータ

使用するデータは、私の配達データ。

期間は、2021年5月10日~10月31日。

上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。

扱うデータの確認

参考書籍では以下のようなデータを使って、自己組織化マップを作成していた。

Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
15.13.51.40.2setosa
24.931.40.2setosa
34.73.21.30.2setosa
5173.24.71.4versicolor
526.43.24.51.5versicolor
1016.33.362.5virginica
1025.82.75.11.9virginica

5列目のSpeciesがカテゴリー変数となっており、1~4列目のデータの特徴とSpeciesが関係している。つまり、1~4列目のデータを見れば、自ずとSpeciesが分かる(予想できる)というわけだ。

上記表と同じようなデータをウーバーイーツの配達データから抜き出す必要がある。

ざっくり表を作成すると以下のようになる。

量的変数A量的変数B量的変数Cカテゴリー変数
1
2

量的変数AとBとCでカテゴリー変数を予想できるようなデータを持ってこなければならない。

配達データの中の分かりやすいカテゴリー変数は、”店舗”となる。カテゴリー変数を店舗とするならば、店舗に関わるデータの中から、量的変数を見つける必要がある。で、その量的変数は店舗によって差がなければいけない。

ということで、適当に量的変数を絞って店舗データを作ってみた。

※以下表は、配達単価平均でソート済み

店舗配達単価平均ベース料金平均配達調整金平均
マクドナルド コザ十字路店488131308
マクドナルド 具志川メインシテイ店488132379
スターバックスコーヒー具志川メインシティ店510138306
ほっともっと 赤道店523146335
A&W 美里店608164334
吉野家 うるま志林川店622157397
ペリペリチキン634171362
カレーハウス CoCo壱番屋 沖縄美里680165324
CORE CURRY 美原本店697170348
らあめん花月嵐 美里805204483

3つの変数で見ると、「マクドナルド コザ十字路店」と「らあめん花月嵐 美里」の差が大きいと分かる。

上記2店舗のみの配達データを扱う。

合計配達単価ベース料金配達調整金店舗
1301127207マクドナルド コザ十字路店
2329132219マクドナルド コザ十字路店
62406150284らあめん花月嵐 美里

参考書籍と同じようなデータができあがった。

自己組織化マップの作成

パッケージkohonenを使うことで、自己組織化マップを作成できるらしい。

参考書籍にならって、自己組織化マップを作成してみる。

install.packages("kohonen")
library(kohonen)
set.seed(10) 
gr<-somgrid(topo="hexagonal",xdim=10,ydim=7) 
data <- read.table("clipboard")
data.som <- som(as.matrix(data),gr,rlen=200) 
plot(data.som,type="codes")

結果、以下の図が表示された。

参考書籍には、この図の見方について特に記述されていなかった。が、以下のことはなんとなく読み取れる。

・円グラフ?の大きさやその中の割合で位置が分けられている
・円グラフ?を構成している色付けされた部分が3つの変数を表している

 

図の妥当性については、このように書かれてあった。

機械学習における問題点の1つは、学習の回数である。関数somのデフォルトでは学習回数が100に設定されている。この回数が用いるデータにおいて十分であるかを考察する必要がある。その考察には、学習過程を記録したグラフを用いた方が便利である。学習過程を記録したグラフは上記に用いた関数plotに、引数type=”change”を用いる。作成される折れ線は、横軸は学習回数、縦軸は各個体とユニットとの距離の平均値である。学習が始まった段階では、距離の平均値が大きいが、その値が学習の回数に伴って減少する。その平均値が減少し安定した値になるまでの学習回数が必要となる。

Rによるデータサイエンス(第2版)

さっそく、上記にある学習過程を見てみる。

学習回数200↓

回数が増えるにつれて、徐々に縦軸の値が小さくなり、振れ幅も小さくなっていることが分かる。この図を見る限り、学習回数は200回で十分のように見える。

が、せっかくなので、学習回数を極端に増やしてやってみる。

学習回数1000↓

回数が増えるにつれての挙動は、学習回数200の場合と変わらなかった。ただ、学習回数800回あたりで急に縦軸の値が下がっていた。このことから、学習回数1000回の方が適切と判断しても良いかもしれない。しかし、学習回数が多すぎると上記のような(学習後半で大きく下がる現象)グラフになることも考えられる。

ちなみに、学習回数1000のときの図はこちら↓

さらに学習回数を増やして、やってみる。

学習回数10000↓

 

学習回数100000↓

1000回の学習回数のときと同じように、学習の後半で急に下がる現象があった。学習回数をやみくもに増やしてはいけない空気を感じた。

ということで、今回の場合は学習回数200の結果が比較的良いものと思っておく。

 

参考書籍を読み進めていくと、パッケージsomを使って、自己組織化マップを作成できると知った。

パッケージsomを使ってみる。

install.packages("som")
set.seed(80) 
library(som)
data <- read.table("clipboard") #標準化済みデータを読み込み
lab <- read.table("clipboard",header = TRUE)
lab$store <- as.factor(lab$store)
data <- as.matrix(data)
data.som2 <- som(data, xdim=6,ydim=5) 
plot(data.som2)

結果、以下の図が表示された。

まったく分からん。。一旦無視して、先に進む。

散布図で表現する方法があった。やってみる。

ransu <- cbind(rnorm(nrow(data),0,0.13),rnorm(nrow(data),0,0.13))
out.new<-data.som2$visual[,1:2] +0.5+ransu
plot(out.new[,1:2],col=c(2:4)[unclass(lab$store)],pch=c(1:3) [unclass(lab$store)])

結果、以下の図が表示された。

丸と三角がカテゴリー変数(店舗)を表している。上記図から丸の店舗が左側に、三角の店舗が右側に偏っていると分かる。

まとめ

今回は、2店舗の配達データで自己組織化マップを作成してみた。結果的に、2店舗の配達データの偏りを図で表現できた。が、理解不能の図や単語がいくつかあり、今までの知識でカバーできない部分があった。

今後、「ニューラルネットワークアルゴリズム」や「機械学習」などを含む分野を学ぶ必要がある。

コメント

タイトルとURLをコピーしました