データマイニング用SOM
SOMの歴史
Kohonenの最初のアルゴリズムが発表されたのが1982年で、それは人工ニューラルネットワークの連想記憶の研究でした。初期のSOMアルゴリズムは、データレコードを1件ずつ読み込んで、逐次、参照ベクトルの値を更新していく方式でした。もともと人工ニューラルネットワークの研究だったので、必ずしも統計的(客観的)なモデルは意図していませんでした。初期のSOMアルゴリズムは、データを読み込む順番によって、学習の結果が微妙に異なってくるという性質がありました。
SOMを統計的な応用に活用しようという研究は、1992年に発表されたSOMのバッチ学習アルゴリズムによって方向性が与えられて研究が盛んになりました。つまり、データレコードを1件ずつ読み込むのではなく、すべてのデータレコードを読み込んでおいて、同時に処理を行う方式です。これにより結果の再現性が保証できる見通しがつき、データ分析にSOMを活用するためのさまざまテクニックが開発されました。
それらの先行研究を受けて、Viscovery(当時Eudaptics社)は1994年から本格的にSOMをベースにしたデータマイニング技術の開発をスタートさせました。そして、1996年に最初の製品Viscovery SOMineを完成させました。そして、2000年にはマインドウエア総研が、Viscovery SOMineを日本語化して、国内でも販売するようになりました。2003年には、上位製品のViscovery software suiteが発売され、SOMローカル回帰という革新的なテクノロジーにまで昇華され、学術研究や研究開発分野のみならず、分析系CRMなどのビジネス分野でも高い評価を受けるようになりました。
SOMデータマイニングにおけるViscoveryの貢献は絶大ですが、もちろん長年の研究の中では、Viscovery以外の大勢の研究者によって提案され蓄積されてきたテクニックが多数あります。これが歴史的事実なのですが、国内では、言語の壁のためか、それらのさまざまなテクニックがほとんど理解されてきませんでした。弊社が国内でViscoveryの販売を開始した2000年以降、数年間、SOMの研究コミュニティとも交流させて頂く機会がありましたが、残念ながら、国内の研究者は相変わらず80年代初頭の逐次型のSOMを用いて、また統計学的にも間違ったデータの取り扱い方で研究を続けていました。2003年頃の時点で、海外と約10年のギャップがあったと推定します。
このような事情なので、SOMだけを研究しているわけではなく、データマイニング技術全般の解説書を書いておられるような先生方には、先人が改良を積み重ねてきたSOM技術を知って頂く機会がないまま長い年月が過ぎ去ってしまいました。結果として、残念ですが、ほとんどの書籍でのSOMの説明は時代遅れのままになっております。また、国内で販売されているViscovery以外のデータマイニング・システムでも、SOMに限って言えば、それらの実装は研究用のトイ・プログラムのレベルを脱していないようです。
データマイニング用のSOMでは、バッチ学習アルゴリズムを使用すること以外にも、たくさんのテクニックがあります。ここでは、その主要なものをまとめておきます。(以下のことは、正しく実装されたソフトウェアを使用すれば、ユーザーがあえて意識する必要のないことも多いのですが、正しく実装されていないソフトウェアがあまりに多く出回っていますので、参考情報としてご活用ください。
データマイニング用SOM
教科書的なSOM | データマイニング用SOM | |
データ前処理 | 最小値が0、最大値が1になるようにスケーリング(最も単純な範囲スケーリング) | 欠損値、はずれ値の処理、値の変換、統計的なスケーリング(範囲および分散スケーリング) |
ノードの初期値 | 乱数で初期化 | 主成分分析により決定 |
学習アルゴリズム | 逐次型SOM | バッチ型SOMがベース |
使い方 | マップにオブザベーションのラベルを貼る | 柔軟なデータベース・アクセス能力を用いてマップ領域の統計的特徴を計算、有用なセグメンテーションの発見、非線形予測モデルの構築など |
主成分分析によるノード値の初期化: SOMアルゴリズムの研究では、乱数によってノードの初期値を決定する方法がよく用いられます。それは、改良アルゴリズムの性能を試すにはよい方法ですが、実践的なデータ分析/データマイニングには不向きです。乱数の初期化は、K-meansの場合と同じく、初期依存性の問題があって、モデルの再現性が確保できません。実践的な場面では、主成分分析の第1と第2主成分で作られる平面に初期のノードを置いて学習を開始することが推奨されます。従来、主成分分析を多用してきた統計ユーザーにとっては、ごく自然で合理的な考えです。主成分分析を基礎として、従来は捉えきれなかった非線形の部分だけをSOMで捕捉すればよいという考えです。
成長SOM: 上記の初期化に加えて、ノード数を最初は少なくしておいて、学習を繰り返すプロセスの中で段階的に格子の行と列を加えていく学習方法です。最初から多数のノードがあると、一部のノードがデータ空間の一部に適合しすぎて、全体として歪なモデルになってしまう危険性があります。実践的な用途では、成長SOMの実装が必須となります。
スケーリング(正規化): 多変量データを取り扱う場合、変数(属性)ごとに値のスケールが異なるので、そのままでは大きな値を持つ変数の影響が異常に大きくなってしまうという問題があります。SOMの研究者は、これを避けるために、変数ごとに最大値を1、最小値を0にするように尺度を変更します。一応、やらないよりはましなのですが、これでは値の分布の仕方によって、尺度変更後に集中する値の大きさが極端に違っていて(たとえば、0.5付近の値が多い変数もあれば、0.05付近が多い変数もあります)、結果として、これでも変数間のマップの順序づけへの寄与度に差が生じます。統計的な観点から言えば、まず平均を0に(中心化)して、分散(標準偏差)で尺度化するのが基本です。そうすると、より変数間の関係性を忠実に表現するマップが得られます。ただし、実践的には、さらに範囲と分散の両方の尺度を使い分ける方法があります。
データの回収と統計解析: 一般的なSOMでは、マップにデータレコードのラベルを貼り付けて、その並び方を見て視覚的な分析を行うのですが、それでは大規模なデータの分析は不可能です。選択されたノードまたはノードの集合にマッチするデータレコードを回収できたり、さらには、その集合での統計解析が行えるようにソフトウェアが実装されている必要があります。一般に機械学習アルゴリズムがデータマイニングの主役と考えられている傾向があるのですが、むしろ分析用ソフトウェアとしての完成度がものをいう部分です。
SOM上でのクラスタリング: データマイニングの入門書の多くでもSOMをクラスタリングのツールとして紹介していることが多いのですが、それらの著者は実際的なクラスタリングの方法を熟知していないようです。SOMのノードの数を極端に少なくして、クラスタリングしようとするのは完全な間違いです。SOM自体は、各ノードがマイクロ・クラスタを形成しながら、データ空間の固有の位相的順序(トポロジー)を保持して、たくさんのマイクロ・クラスタを並べるだけです。最終のクラスタリングまでは行いません。クラスタリングを完成させるには、SOMの上で、さらに別の改良型のクラスタリング手法を実行する必要があります。
プロファイル分析と多重比較検定: SOM上でのクラスタリングは、従来のクラスタリングと比べて優れた特性を持ちますが、かといって、それによってクラスタリングの結果が権威づけされたり、客観的で正しいクラスタリングとして主張されるべきものでもありません。ユーザーは、目的を持って、有用なクラスタを探索するべきです。あるいは、クラスタリングをもとにして、さらに有用なセグメンテーションを創造するべきです。そのために必要なことは、クラスタやマップの任意の領域の統計的特徴を精査することです。SOMをベースにしたデータマイニング・システムは、そのような機能を搭載していなければなりません。
SOMローカル回帰法: SOMは多次元の大規模データの分布を2次元の格子で要約し、自由曲面を形成します。つまり、離散的ではあるけれども、非線形の要約になっております。SOMローカル回帰は、①まず通常の線形の重回帰モデルから出発して、これをグローバル回帰と位置付けます。②各データレコードでのグローバル回帰の残差を新たな目的変数(ターゲット値)として、SOMの各ノードで定義された空間(受容野)ごとに多数の線形モデルを作成してローカル回帰とします。結果として、ノードごとに変数選択や回帰係数の異なるモデルが作成されます。予測精度と柔軟性、モデルの可読性を兼ね備えた究極の予測分析手法です。
モデルのリアルタイム実行: SOMの基本の動作原理は、マップのノード値とデータの値のマッチングです。既存のマップを新しいデータとマッチングさせて、データ集合がどのノードに対応するか(どれが最も近いか)を決定することができます。これは単純な処理なので、コンピュータ上で高速に実行することができます。これを利用することによって、SOM上で作成したセグメンテーション・モデルや予測モデルを高速で実行することが可能になります。SOMは単にマップを眺めてデータを分析するだけでなく、既存のさまざまなITと統合することで、リアルタイムの意思決定支援システムを構築することができます。