Alteryxでk-nearest neighbor

こんにちは、小澤です。
今回はalteryxでknn(k-nearest neighbor)を利用してみます。

knnとは

あるデータに対してk個のそれに近いデータの情報を利用するための手法になります。 これはどういうことかというと、例えば下の図のようなデータがあるとします

knn

このデータに対して分類を行うとすると下の図のような決定境界ができ、この線をモデルとして表現します。

knn2

どのような形や位置になるかは利用するアルゴリズムやパラメータによって異なりますが、このようにモデルを作成する学習を行い、未知のデータに対しては決定境界に対してどの位置にあるかでどのクラスに所属するかが予測できます。

knn3

それに対して、knnではこのようなあらかじめモデルを作っておくことはしません。 すべてのデータを保持しておきそれに基づいて判断されます。
例えばk=3の場合は下の図のようになります。

knn4

ここでは分類のための多数決を例としていますが、k個の近傍をどのように利用するかはこの限りではありません。
実際、このあと紹介するサンプルのワークフローでは近傍に関するデータを取得するようなものになっています。

alteryxで利用する

knnをalteryで利用してみます。 今回はサンプルにある

Sample Workflows > Predictive Analytics > 17 Find Nearest Neighbor

を利用します。 ワークフローの全体像は下の図のようになります。

スクリーンショット 2017-02-01 18.10.23

このワークフローでは設定の異なるknnを3つ使ってその結果を比較していますが、全てを説明すると冗長になるので、一箇所を取り上げて解説したいと思います。

knnを利用するにはFind Nearest Neighborツールを利用します。

スクリーンショット 2017-02-01 18.12.57

このツールには2つの入力があります。
1つは上のknnの説明の図にあるo,x, △といったすでにあるデータです。機械学習でモデルを作る手法などですと、学習データとして利用されるものに該当します。
2つは図中では「?」に当たる予測を行う対象のデータです。
knnでは学習というプロセスが存在せずデータ全体を保持しておくため、このように入力としては両方同時に指定が可能になります。

ツールの設定は以下のようになります。

スクリーンショット 2017-02-01 18.20.25

各データを一意に表すための、Unique key fieldと距離計算につかうFieldsの指定は解説の必要はないかと思います。

その次にあるStandardize the fieldは特徴次元ごとに距離の広がり方に違いあるものを吸収するための設定になります。 チェックを入れるとさらに下の図のように2種類から選択することができます。

スクリーンショット 2017-02-01 18.23.01

具体的な計算などの詳細は避け、どのようなことをするかを簡単に説明すると

  • z-scores standardizationは各特徴が平均0、標準偏差1になるように調整されます
  • Unit-interval standardizationは各特徴のデータが0-1の範囲に収まるように調整されます

このサンプルでは、この設定を行わない場合も含めた3種類で結果の比較を行っています。

次のThe number of near neighbors to findはk個のkを設定するものになります。 この値を変更しながらどのように結果が変わるかを見てみるのもいいかもしれません。

最後のThe algorithm to use for finding the nearest neighborsですが、これは「近いものを見つける」というのをどのように行うかのアルゴリズム選択になります。 どういうことかというと、任意の2点間の距離を計算するということ自体は難しいものではないですが、knnをそのまま実装しようとするとすべてのデータと予測対象の距離を計算しソートする必要があります。 データ量が非常に大きくなるとこの「すべての」データとの距離を計算するという部分が現実的ではなくなるため、近似解となるかわりに距離を計算しなければならないデータの量を減らすということが行われます。 近似解を求めることになるので計算速度とどれだけ正確であるかのトレードオフの問題などで複数のやり方が存在するわけです。 選択可能な個々のアルゴリズムの詳細にはここでは立ち入りませんが、必要に応じてこちらも比較してみるなどするといいかと思います。

knnの出力は2つあります。
1つ目はk個の各近傍とそこまでの距離となります。

スクリーンショット 2017-02-01 18.23.01

このように近傍とその距離がそのまま出力されるので、最初の解説のような分類問題を解きたい場合はクラスに関する情報が含まれるデータとjoinし多数決(や距離による重みを考慮した多数決)をすることで同様の結果を求めることができます。

スクリーンショット 2017-02-01 18.37.45

もう一方は入力の2つのデータをunionしたようなものになります。

スクリーンショット 2017-02-01 18.40.04

サンプルにある3つのknnは同じデータでデータの範囲を操作した3つのknnの結果をjoinすることでそれぞれを比較しています。

終わりに

今回はalteryxでknnを使う方法を解説しました。 knnは考え方が直感的にわかりやすいものでありながらもかなりの効果を発揮してくれることもある手法です。 事前に学習を行う他の機械学習アルゴリズムと比較すると異質ではありますが、必要の応じて利用していくことで強力なツールとなります。