ビジネス課題への解決策(アイディア)と、新たな発想(+α)が見つかるIT情報メディア

Menu
  1. TOP
  2. システム運用
  3. インシデントデータをカテゴライズ 最適な方法を教えてAzure Machine Learning先生

インシデントデータをカテゴライズ 最適な方法を教えてAzure Machine Learning先生

  • LINEで送る
  • このエントリーをはてなブックマークに追加

今までのブログでも書かせて頂いていますが、

・周りにすごーいと言わせたい、役立たずで扱いにくいデータ達 ~ITサービスでのデータ運用活用~
・宝の持ち腐れ、DeepLearningで活かせインシデント大量データ

機械学習で色々としています。

さて、今回は手法のお話しというよりも機械学習のできるSaaSの紹介からしていきたいと思います。
その名もマイクロソフト社が提供しているAML(Azure Machine Learning)です。

AML(Azure Machine Learning)


え?そんな名前のSaaSなんて知らない?
そのような人の為に簡単に紹介します
実際の画面が次の画像になります。

機械学習の機能を様々提供しており、
それらの機能を繋げて簡単に機械学習の処理を作れてしまうというものになります。

上記は既に様々な機能を繋げて繋げて組んでる画面になります。
左側が機械学習の機能が一覧として出ている所で、機能ごとにカテゴリ分けがされています。

必要なものをカテゴリから選ぶ事ができます。

真ん中が機能をドラッグ&ドロップで置ける所になっていまして、

実際に処理を組む場所になります。
一番右側がそれぞれの機能のオプションを設定できる画面になります。

それぞれの機能の四角には丸い部分があり、
その部分をマウスでドラッグすると次の画像みたいに線を繋げる矢印が出てきます。

接続が可能な部分は緑色の丸になりますので、そこに接続します。
このような感じで様々な機能を繋げて処理を書くことができます。


え?色々機能はあるけどそんな名前の機能なんて知らない?
たしかに簡単に機能は繋げることはできますが、ある程度どう作れば良いかがわからないと
オリジナルの処理を書くのは大分難しいです。

ですが、大丈夫です。初めての方でもサンプルデータがありますので、
その中からやりたい処理を選んで動かすこともできます。
まずは、サンプルデータから見ると良いでしょう。

Azure MLって何? からワークスペース作成まで

ここの記事の作者様がサンプルデータを使って試しています。
初めての方はここを見てみるといいかもしれません。導入手順等も丁寧に書かれています。

ではここからは私が何をAMLでしたかのお話しをしましょう。
ITサービスマネジメント部である私は日々運用でインシデントデータを貯めております。
そのインシデントデータで何かできないかなと色々試行錯誤しておりました。

とりあえず、したこととしては "カテゴライズ" です。
様々なデータが交錯している中どれがどれと類似しているか等を見たくなったからです。
カテゴライズすれば、おのずとどのインシデントデータが似ているのかがわかります。
それを応用すればインシデントのサジェスト等をすることができます。それを応用すれば、人間が手を出さなくても勝手に機械が判断して類似のインシデントから新規のインシデントの回答を出せる自動回答機能ができてしまうかもしれません・・・。
という夢を見ながらやっておりました(笑)


実際にどんな処理をしたかを下の図で説明します。

図の左側が処理の一連の流れです。

図の右側がどの手法を使ったかを表しています。

データ加工、特徴を探す、特徴を学習する、学習したものにそって分類
と言った事をしました。

テキストデータは実際のインシデントデータを使いましたが、
そのままじゃとてもではないですが、使い物になりません。
加工してあげましょう。
ここで、JavaのライブラリのKuromojiを使って形態素解析というものを行いました。

「私は絵を描くことが好きで、小説を書く事が好きな兄がいます。」
このような文章を単語ごとに区切って出力することができるのがKuromojiです。
たぶん次の様になるでしょう。

"私" "は" "絵" "を" "描く" "こと" "が" "好き" "で" "小説" "を" "書く" 事 "が" 

"好き" "な" "兄" "が" "います"

Kuromojiではある程度禁止ワードを決めることができます、例えば助詞、助動詞、副詞といったものを分析して予め取り除く事ができます。
これをすることで機械学習を行うためのデータの準備をすることができます。(データにはゴミみたいなワードもあったのでそれを取り除くのが大変でしたが・・・)

次はこの単語ごとに分けた文章の特徴を見つけていきます。
今回はこんな手法を使いました。

TF-IDF

発音しただけではなんのことかわかりませんね、

Term Frequency(TF)
Inverse Document Frequenc(IDF)
の略なのですが、簡単に言うと
一つの文章の中でよく出てくるもの かつ 全体の文章でよく出てこない単語を特徴とする手法です。

1.「私は絵を描くことが好きで、小説を書く事が好きな兄がいます。」
2.「私には小説を書く友人が兄以外に3人程いて、友人はみんな仲良しです」
3.「私は家で絵を描くことに没頭できます、ですがそのせいで家を出たことがありません。」

この全体の文章の中では"私は"とか"絵を描く""兄"などのワードは良く出てくるので排除された後に、
それぞれの文章では1番目は"好き"、2番目は"友人"、3番目は"家"がよく出てくるので特徴の候補に挙げられます。
(本当はもっと高度な事をしていますので、簡単な一例と思ってください)
ここで特徴を出すことができたので、あとは機械学習で学習させます。
今回使ったのがニューラルネットワークです(Deepleaningで使われている手法です)。
中身は何をしているかはブラックボックスですが、
AMLでは勝手に学習を行い、勝手に入力データに対して処理を行ってくれます。

(といっても設定等は行います)

今回は学習して、入力データを学習した特徴量でカテゴライズする処理を行いました。
以下のような入力文章を上の特徴でカテゴライズするとしたらこうなると思います。

4.「家の部屋の中でずっと絵を描き家の人に部屋までご飯を持ってきてもらう生活を送っています」 → 家
5.「私は人生の中で一番絵を描くことが好きです。何よりも好きです」 → 好き

こうカテゴライズできますので、1と4は似ている。
3と5は似ているのような事がわかります。

この処理を実際にAMLで行ってみました。

上の処理から説明していきますが、

【特徴抽出】

「indicent03.csv」が実際のインシデントデータです。(Kuromojiで加工済み)
ここから「Extract N-Gram Features from Text」に線が伸びています。
ここがTF-IDFを行う機能になります。

【データ振り分け】

その下に行きますと「Split Data」とありますが、
英語の言葉通りデータを分けます。なぜ分けなければいけないかといいますと
ここで、学習する為のデータと実際にカテゴライズする入力データを分けるためです。
データを分けたのでその下は線が二つ伸びています。

【データの学習】

左側に「Train Model」とありますが、ここが実際に学習を行う所になります。
なにで学習するの?という所がその左上に伸びてる線の「Multiclass Neural Network」になります。
「ニューラルネットワーク」で学習してくださいという事になります。

【カテゴライズ】

ここまで来るととうとう、学習データと入力データを使って機械学習を行います。
「Score Model」という所で、学習データ、入力データを使ってカテゴライズを行っています。
線が二つ「Score Model」に繋がっているのが分かると思います。
あとの処理は結果をCSVデータとして出力する処理が書かれています。

機能の意味を知っていればこのように簡単に処理を描くことができます。

これがAMLの強みのところだと思います。


結果は社内データなので直接見せる事ができませんが、
入力文章が近いカテゴリ(特徴)で分かれてはいました。
問題だったのが特徴量を出すところで特徴のワードが一つになっていなかったところです。

「家の部屋の中でずっと絵を描き家の人に部屋までご飯を持ってきてもらう生活を送っています」
という文章だったら、「家」「部屋」というのが二つ特徴として出てきてしまうような事です。
まだ2つだったら良いのですが、文章によっては6つ,7つと特徴が出てきてしまい
カテゴライズするのにノイズが多くなってしまいました。
もう少し前処理をうまくできればもうちょっとノイズが減らせるのかなと考えています。

と言ったところが今回の私が行ったところになります。まだまだ、課題も多いところがありますが、
インシデントデータを無駄なく仕事に活かせるように機械学習を勉強していきたいと思います。

おすすめ記事

メールマガジンの登録はこちらから
メルマガ登録 お問い合わせ