チラシの裏の設計書

プログラム開発、データ分析からロボット作りまでものづくり全般を思うがままに書き連ねたブログ。

カッとなってやった。えーあい系の記事をできるだけ直してみる。

チラシの裏です。

カッとなって殴り書きしますのでご了承ください。

いや、お前も間違っとるやんけという場合はまさかり投げてください。

 

~~~~

 

ふとこちらの記事が流れてきました。

iedge.tech

機械学習周りの知識がある方ならまずタイトルをみて「見なくていいか」となる系のやつです。「”スポーツ”と”球技”の違いは?」みたいなズレた比較してるためです。

 

普通ならスルーするところですが、軽く読んで見たところ"変な教師データで学習してしまったモデルによる自動生成文章かなにか"かと思うぐらい、これでもかというほどダメな例が詰め込まれているのを見て、放置するのも悪い気がしたので弱小チラシの裏ブログで指摘と修正を行っておこうというわけです。

ぜひ先に元記事をご一読ください。 

 

ではスタート。

 

導入部分

人工知能(AI)には「機械学習」と「深層学習(ディープラーニング)」というものがあることをご存知でしょうか。現在、多くの人工知能に採用されているのは機械学習の機能です。

 == 修正案 == 

人工知能(AI)を支える技術として「機械学習」が注目されており、その中でも「深層学習」というものがあることをご存知でしょうか。現在"人工知能"を謳う様々な製品やサービスで機械学習は多く活用されています。

==

まず、人工知能機械学習・深層学習の整理からしましょうか。

それぞれの用語は元の定義も広義に使われていたり、近年のブームでぐちゃぐちゃになったりはしていますが、以下のように捉えるのが妥当かと思います。

人間の知能をコンピュータで再現したり解明したりしようとする研究分野。

いわば「概念」「目的」にあたるものです

あるタスクに対してコンピュータプログラムが経験に基づいて改善していく仕組み。

いわば「計算方針」「手段」にあたるものです。ちょっと強引ですが。

人工知能を実現するための手段として注目・発展しています。

 もっと良い言い方考察はこちら:機械学習とは何か? – 機械学習の定義と使える言い回し | POSTD

  •  深層学習

機械学習の一種であるニューラルネットワークの層を深くしたものの総称。

機械学習に基づいた具体的な「手法"群"」です。

"群"としているのは「深層学習」だけでは具体的な手法(アルゴリズム)のことは指していないからです。

 

「人間の知能を再現する」という大きな目標に対する手段の一つとして、機械学習という「入力されるデータを元に処理アルゴリズムを改善(数式の重みチューニングしている)していく手段」が有効ではないかという流れがあり、その中でも注目されているのが「識別器(計算式)を何層にも重ねて複雑な事象を表現できるようにした」深層学習というものです。 *1

これらをふまえると、"人工知能には「機械学習」と「深層学習」がある"という列挙の仕方はおかしいですし、"多くの人工知能に採用"という人工知能が商品か何かのように扱うのも不適切です。

 

 ・・・最初の2行でこれだけ書くペースで大丈夫なのだろうか。 

 

コンピュータが進化し、AIの性能が向上していくと同時に深層学習がメインになるともいわれていますが

聞いたことがありません。

そもそもぱっと見て「??」となった文章なのですが、無粋なツッコミはやめて意図を汲み取ると

 == 修正案 ==  

ハードウェアの性能向上により、計算量が膨大になりがちな深層学習を利用することが現実的になってきたため、今後広く活用されることが見込まれています 

==

ということですねたぶん。

 

機械学習」とは? まずは簡単に解説 の章

AIの仕組みを知るうえで欠かせないのが「機械学習」というものです。

そもそも「(概念や研究課題である)AIの仕組み」というのは表現としておかしいのですが、主にビジネスの現場では残念ながらAIというと「いい感じに賢く動いてくれるもの」という意味ぐらいにしか使われていないということは補足しておきます。

 

機械学習とはその名の通り、コンピュータが物事を学習していくことです。これまでの一般的なコンピュータのプログラミングでは、人間と同じように画像を認識したり言語を認識したりすることは難しいものでした。

しかし、AIにおける技術のひとつである機械学習を活用することによって、画像を認識して一定の法則に則って分類するという処理も可能になりました。

概ね言いたいことは合っています。

が、この手の記事では機械学習がさも魔法のように書かれるんですが、機械学習も「一般的なコンピュータのプログラミング」で実現されるものですので、そこは誤解なく。

 

 機械学習の基本的な仕組みは、いくつかのサンプルデータをコンピュータに認識させたうえで特徴を判別できるようにするというものです。

用語の使い方が適切ではありません。

文脈から察するにこれは後で出てくる「教師あり学習」のことを説明しようとしていると思われますので、直してみましょう。

 == 修正案 == 

教師あり学習の基本的な仕組みは、すでに答えのわかっているデータの「特徴と答えの組み合わせ」をパターン化することで、答えがわかっていないデータに対しても答えが推測できるようにするというものです。

==

 

前提知識がない場合それっぽく聞こえるかもしれませんが、これでは誤ったイメージを植え付けることになりかねません。

機械学習関連の話題では"認識", "特徴", "判別"といった単語が出てくることが多いので、一旦確認しましょう。

  • "認識"は、それが何であるかを特定する、もしくはどのグループに属するかを決定するというものです。
  • "特徴"は、その対象を表す情報です。"変数"や"属性"と言い換えるとわかりやすいかもしれません。
  • "判別"は、基準に基づいて分類する行為ですね。

文章をそのまま理解しようとすると「サンプルデータをコンピュータがこれは何であるかということを特定してから、その属性を分類できるようにする」となります。

ちょっと何言ってるかわかりません。

"いくつかのサンプルデータ"という表現も数個程度のデータを想像してしまうので表現としてよくありません。

 

このようにコンピュータ自身がデータを学習して判別可能にする仕組みを機械学習アルゴリズムとよび、基準となるサンプルデータの数が多ければ多いほど機械学習の認識精度も高くなる傾向にあります。

== 修正案 == 

このようにコンピュータ自身がデータを学習して判別するための基準を作る仕組みを機械学習アルゴリズムと呼び、教師となるデータの数が多く、質が高いほど判別の精度も高くなる傾向があります。 

==

判別可能であることが機械学習アルゴリズムなのだとしたらこのあとの「教師なし学習」の章は?ということになりますがそこは黙っておきましょう。

データ量が多いほど~というのはよいのですが、"サンプルデータ"という言い方をずっとしているのはなぜでしょうか。サンプルデータというと母集団から取ってきた一部のデータという意味合いが強くなるため単純に"データ"で良いでしょう。

 

ちなみに、近年になってAIが大きな盛り上がりを見せているのは、ビッグデータを活用できるようになったという背景があるためです。スマートフォンとインターネットの普及により、あらゆるデータを短期間で収集することが可能になりました。データの分母が大きければ大きいほど機械学習の精度は上がるため、ビッグデータによって精度の高いAIが続々と登場しているのです。

 

ここも言わんとしていることはわかるのですが、もうちょっと正確に書いてほしいものです。

== 修正案 == 

ちなみに、近年になってAIが大きな盛り上がりを見せているのは、コンピュータやネットワークの進歩によりこれまで収集や保持、高速な処理が困難だった大容量のデータを活用できるようになったためです。

==

AIの盛り上がりはハードウェアの進化(データを蓄積するストレージの大容量化、高速に処理できる基盤が安価になった)やインターネットの普及があるのはその通りです。・・・この文脈でスマートフォン

"あらゆるデータを短期間~"は、実務にあたってる方々からは大いに反論があるかとは思いますが、一般大衆向けの記事ならまぁいいでしょう。

"データの分母が~"というところは・・・分母??分子は何でしょうか?"量"や"サイズ"なら理解ですが、それとも"母数"を誤用的な意味で使いたかったのかな、と思ってしまいます。

 

このほかにも、サンプルのデータがない場合に近い性質のデータ同士をまとめるといったような機械学習のパターンもあり、用途に応じて幅広く活用できる技術でもあります。

これを読んで、"サンプル"と呼んでいるものが正解ラベル付きの教師データのことであることがわかりました。記事読む人、わかるのかこれ?

== 修正案 == 

この他にも、何かを判別するというものではなく、データ同士の類似性を用いてグルーピングするというような機械学習のパターンもあり、幅広く活用できる技術です。 

==

また、後の章でも出てきますが「教師データがないから仕方なく教師なし学習をやる」と読み取られかねない書き方がありますがそうではなく、目的が異なるものです。(実務上では教師データないから仕方なく、というのもないわけではないですが。)

機械学習の「教師あり/なし学習」について の章

機械学習における「教師あり学習」とは?

機械学習の方法には主に「教師あり学習」と「教師なし学習」という2つのパターンがあります。今回は初めての人でも分かりやすくするために、トランプカードを例に出しながら解説してみます。

トランプカードの例は見たことがないので期待(白目)

教師あり学習とは一定のサンプルデータをもとにデータ処理を行う機械学習の方法です。

== 修正案 == 

教師あり学習とは正解ラベル付きデータ(教師データ)を使ってパターンを構築するモデルです。

==

ぐらいにしよう。

そして以下トランプの例

例)自分の手元に「ダイヤの10」というカードがあったとします。ジョーカーを除いた残り51枚のカードから同じ数字の3枚を集めたい場合、あらかじめコンピュータに対して「10」という数字のカードを条件として分類するように機械学習のモデルを作成します。


すると、機械学習アルゴリズムによって数字ごとにカードが分類されます。このとき、数字ではなく「ダイヤ」という絵柄をキーにした場合は、10という数字ではなくダイヤの絵柄に注目して分類が行われることになります。

 機械学習の要素が何もありません。10という条件で10のカードを分類するのはなんの変哲もないif文(条件分岐)やselect句(抽出)のたぐいですね。

機械学習はむしろこの例の説明とは真逆で「どういうキーを使ってどういう基準で分類すべきか」という条件を人間が指定せず、正解ラベルから自動的に組み立てるものです。

トランプの例は無理があるので、犬猫分類を考えてみます。

== 修正案 == 

自分の手元に動物の写真があるとします。やりたいこととして、新しく動物の写真を撮ったときそれが「猫なのか犬なのかどちらでもないのか」を自動的に判別するというものを考えます。例えば、「色が白ければ猫、茶色なら犬、それ以外は他の動物」というように判定基準を決めて分類するものをルールベースの手法と言ったりします。教師あり学習は、手元にある写真に「この写真は猫」「この写真は犬」「この写真なその他」というように写真と導きたい答え(教師)が紐付いたものを教師データとして学習し、判別したい写真を入力すると「猫or犬orその他」を適切に出力するようなルールを作るという手法です。答え(教師)から学んでいくということで教師あり学習と呼ばれているものです。

==

 

 このように、サンプルデータとなるもの、すなわち「教師」が存在し、それの条件と合致するものを選ぶのが「教師あり学習」の方法です。

これまでの話の通りいろいろと違います。

== 修正案 == 

正解がわかっているデータが存在し、それらのデータから規則性を見出す(学習する)のが「教師あり学習」の方法です。 

==

この記事では、「サンプルデータ」は「教師データ」の意味で使われており、「教師」は「分類ルール」という意味で使われているようです。

用語だけでなく、「条件と合致するものを選ぶのが教師あり学習」という説明も違います。

 

機械学習における「教師なし学習」とは?

トランプカードが手元に一切ない場合、AIはどのような動きをするのでしょうか。いわば教師であるサンプルデータがないため、何を基準に分類すれば良いのか難しいところです。

やはりサンプルデータと呼んでいるのは教師データのことのようです。

「AIはどのような動きをするのでしょうか」という書き方をすると、さもAIという万能の何かがデータに応じて異なる動きをするように見えますが、「何を目的にどのデータを使ってどのようなアルゴリズムを用いるか」を決めるのは人間の仕事です。「分類がしたいので教師なし学習をする」という選択は人間が行います。

もちろん後述する強いAI・弱いAI議論のなかで人間以上に全ての物事に汎用的に対応できるAIの話なら別ですが、少なくともこの記事でそのような議論はされていません。

 

この場合、AIは「数字別」、「図柄別」、「色別」といったようにそれぞれのグループにまとめる「クラスタリング」という仕事をします。基準とするべきサンプルデータがないため、とりあえず近似値のデータ同士をグループ化することで見やすくまとめることが可能です。

 クラスタリングと呼ばれる手法は教師なし学習の代表的なものではありますが、あくまでグルーピング(分類)をするという目的のもと、行うものです。データの性質をつかってグループ分けするというのがこのクラスタリングという手法のやることであるため教師というものを必要としないというだけです。

例も適切ではなく、「数字別」「図柄別」「色別」というのはトランプがすでに持っている情報そのものであり、それをまとめることの意味があるのでしょうか。「ハートとスペードにカードを分類しました」ってなってもそれもまた単にif文かselect句か、、、という話ですね。

トランプの例でクラスタリングを語るなら「人間の感覚として"ハート5"と"ダイヤ5"はそこそこ似てる気がするけど"ハートの2"と"クローバーのキング"は別っぽいよね」というのをグルーピングするような例にしてはいかがでしょうか。(それでもトランプだと例がキツイな。)

また、文章全体で言えることですが専門用語(とおもわれるもの)を全く適切に使われていないので注意が必要です。

「近似値のデータ同士をグループ化」と書かれていますが近似値というのは「真の値に近い値」であって、文章の意味が通っていません。

 

ちなみに、教師なし学習はこの後に紹介する「ディープラーニング」の基本となる考え方でもあります。

違います。

ディープラーニングの基本となるのはニューラルネット、もっと辿ればパーセプトロンのような考え方であり、むしろ教師あり学習の代表格です。

 

この章はズレすぎてて、直しすらできない。。。

機械学習ディープラーニングとAIとの違いは? の章

機械学習と並んでディープラーニングという言葉が比較対象となることがあります。ディープラーニングを日本語に直訳すると「深層学習」という意味になりますが、機械学習と何が違うのでしょうか。

比較対象にしないでください。違いについては上のほうのまとめをどうぞ。

== 修正案 == 

機械学習の中でディープラーニングという単語が登場することがあります。ディープラーニングを日本語に直訳すると「深層学習」という意味になりますが、どのような特徴があるのでしょうか。

==

機械学習ディープラーニングの違い

機械学習ディープラーニングの決定的な違いは、一部分を見るのか全体を見るのかというポイントにあります。

意図が読み取れないのですが、違ってるということはわかります。

そもそも機械学習は方法論であり、ディープラーニングはその実装の一つです。比較としてズレています。

先ほどのトランプの例で説明すると、機械学習の場合は「数字」、「図柄」、「色」のいずれかを見て分類するということを人間が学習させなければなりませんでした。しかしディープラーニングの場合、人間から指示は一切出しません。

機械学習とはその名の通り、コンピュータが物事を学習していくことです。」ってさっきご自分で書いてたじゃないですかー!

あと、人間からの指示はいっぱい出します。

コンピュータがみずからトランプの特徴を一枚ずつ読み取り、52枚全てのカードの特徴を自動的に見分けていきます。そのなかで数字や図柄、色といった特徴をつかむようになるという仕組みです。まさにこれは人間の頭脳の仕組みと似ています。

人間の脳の学習、つまり生まれたばかりの赤ちゃんが学んでいくところを想像していただきたいのですが、世の中に存在するものを1つずつ読み取って自立していくわけではなく、大人たちの手本となる行動(教師データ)を真似することで学習したり、いろいろなものを口にいれてみて食べれる/食べれないやおいしい/おいしくないをパターン化していきます。それと似たような動きをするのがディープラーニングという話です。いや、ディープラーニングではなく教師あり学習の動きというのが正しいです。

 

しかし、現時点で人間の脳と同じような真のディープラーニングは実用化されていません。そもそも人間と同じ脳の仕組みをAIとして再現すること自体も難易度が高く、まだまだ先の将来になる可能性が高いといわれています。

人間の脳がディープラーニングだと言わんばかりの書き方ですが、ここも色々勘違いしているような?

まず「パーセプトロン」や「ニューラルネット」というような命名があるように脳神経の仕組みに着想を得て進歩して行ったという経緯はありますが、脳の機能を丸々再現しようとしているようなものでもないですし、脳の仕組みが解明されているわけではないですし。。。

「脳の仕組みをAIとして再現すること自体も難易度が高く」とありますが、難易度云々とかの議論で収まるレベルの話ではない気がします。また「真のディープラーニング」ってなんでしょう?強いAIのこと言ってるのかな?ここの文章はそういう話をしていると仮定して補足書いておきます。

強いAI・弱いAIという分類方法があります。

  • 強いAIとはいわば人間の知能の再現で、考える力や学ぶ力をもつ汎用的なもの。ドラえもん
  • 弱いAIは特定のタスクに特化して、人間と同等以上の性能を発揮することを目指すもの。

一昔前に「人工知能」といえば強いAIのようななんでもできるロボットを多くの人が想像しました。近年の流行の主役は弱いAIのほうで、ボードゲームでプロに勝利したり、画像認識というタスクで人間よりも正確だったりしました。

弱いAIと強いAIは単純に弱い→強いに進化するものではなく、むしろ別物の課題と捉えるほうが自然です。(このあたりは専門家でも意見が分かれる)

 

ここの章も直しとかってレベルじゃないので。 

機械学習人工知能(AI)の関係

機械学習はAIのなかの「ひとつの機能」といえます。AIが人工知能としての役割を果たすために人間の言語や画像などを認識し、判定するための仕組みです。

なんか、文章中でもAIと機械学習の意味ころころ変わってません?

タイトルが人工知能(AI)となっていて、人工知能=AIを示しているのかとおもったら、「AIが人工知能としての役割を果たす・・・」となってるのは、文章として気になりますが、文章の内容について言いたいことは人工知能機械学習ディープラーニングの違いの部分をご参照ください。

機械学習のさらなる進化系としてディープラーニングがあるというイメージで問題ありません。

問題ありますやめてください。

 == 修正案 == 

機械学習人工知能の取り組みの中で進歩して行ったひとつの技術と言えます。人間の言語や画像などの認識が行えるようになっています。さらに近年ではディープラーニングという複雑な事象に対しても高い認識精度を出せる技術も注目されています。

==

ぐらいの添削で許してください。

機械学習で可能になること

ディープラーニングとは違い、機械学習は人間が何らかの指示やデータを与えないと思うように正しく機能してくれません。しかし、指示を与えるからこそリクエストに的確に応えることができます。

ここは「ディープラーニング」「機械学習」ではなく、「ルールベースのプログラム」に置き換えましょう。そのほうが自然です。

 

たとえば、ある商品の購入者をビッグデータとして取り込み、特定の客層を抽出して分析を行うこともできます。また、クラスタリングによって全体の客層の傾向を把握することも可能。統計データとして人間の手でまとめるよりも迅速で正確なデータ分析が可能になります。

こちらの例も「プログラム」もしくは「統計処理」の話ですね。

あと無理にビッグデータって言葉いれなくていいです。データでいいです。

 

機械学習の代表的な例として挙げられるのはRPA(Robotic Process Automation)です。パソコンを使った事務作業を行うロボットのひとつで、プログラミングの専門的な知識がなくても仕事を覚えさせることができます。

これまた困ったことに流行りの言葉を入れてみましたという感じの文章ですね。

機械学習の例にRPAを挙げるのは適切ではありません。RPAは事務作業のような定型的な作業を機械に代用させることです。

RPAを実現させる手段の一つとして機械学習が使われることはありますが、機械学習の例がRPAかと言われると、比較の粒度も方向も疑問です。

それにしても機械学習を人間が指示しないとだめといったり知識がなくても覚えさせられると言ったり、理解が曖昧な様子ですね。

 

AIの技術者がいない中小企業や実務を担当する部署であっても、手軽に導入できるシステムとして多くの企業からRPAは注目されています。

これ、AI・機械学習にも言えるんですが、なんでもできそう感を煽っておいて、信じて飛びついたお客さんが失望して退場していくのはもはや日本の伝統芸ともいえるものなので、"AIの技術者がいない中小企業"の方こそ上辺の理解ではなく正しい仕組みの理解をしていただきたいです。

というか多分それもきついと思いますので信頼できる技術者や企業とご相談することをおすすめします。

 

(導入事例は飛ばして)

機械学習の現状と未来 の章

これまでコンピュータにできることは限られており、人間がプログラミングなどの指示を与えなければならないとされてきました。

しかし、現在ではコンピュータ自らが過去のデータと照らし合わせながら独自に判断することが可能となっています。参考となるデータが多ければ多いほどコンピュータは学習し、その精度も高くなっていきます。

 過去のデータと照らし合わせて判断するようにプログラミングなどの指示をコンピュータにしていますからね。

現時点において、機械学習は人間のルールによって動作するものです。しかし、コンピュータの性能が上がりAIが進化していくと、やがて機械学習ではなく深層学習(ディープラーニング)という領域に突入することになります。

コンピュータの性能によりAIが進化するものではありませんし、機械学習と深層学習の関係はさんざん書いてきた通りです。

おそらく筆者の方は深層学習という単語の漢字だけ見て、「めっちゃ考えるコンピュータ」ぐらいの理解してるなという印象です。

人間と同じような思考をもち、業務の効率化の提案なども可能になるとされている深層学習は、遠くない将来に私たちの前に登場するといわれています。

少し前の章で

そもそも人間と同じ脳の仕組みをAIとして再現すること自体も難易度が高く、まだまだ先の将来になる可能性が高いといわれています。

とあるのと文章内のトーンぐらい合わせてほしいものです。

機械学習と深層学習のどちらが優れているかではなく、用途に応じて使い分ける能力が、今後のAI活用の中で重要な課題となるはずです。

ここもルールベースのものと比較するならまだわかるのになぁ。

人間にも得意なこと、不得意なことがあるように、人口知能においても両者をうまく使い分けていくことが必要とされる時代が間もなくやってきます。

こんにちは、"人口"知能警察です。

ここまできれいにオチをつけてくれると、炎上狙いの釣り記事なのかなということも想像してしまいます。また、文章後半部分からは前半の間違いに重ねる形で議論が続いているため、書いてることがめちゃくちゃすぎて添削すらできなくなってきました。

 

人工知能機械学習の基本を抑えてる人にとってはこういう記事は無視すればいいだけなのですが、新たに学びたい人がなんとなく理解しやすそうだからということで参考にしてしまうと、間違った認識で会話していくことになり延いては業界やエンジニアの疲弊に繋がるので注意していただきたいなと一応一業界人?ではある(と自称している)私からの愚痴なのでした。

 

〜〜〜

夜中のテンションで書いたにもかかわらず、ずいぶんと疲労のたまる作業でした。

えーあいなんとかしてー。

 

--

*1:無理やり日常生活的な例に当てはめるとすると、「健康になりたい(人工知能)」という目的のために「スポーツをすればいい!(機械学習)」というブームが起こり、その中でも「球技(深層学習)」がすごいらしい、となっているイメージです。

健康になるためにスポーツ以外のことをすることだってありますし、健康目的以外でスポーツすることだってあります。球技以外にもスポーツはたくさんありますし、筋力をつけて健康になりたいなら球技よりも他の方法を勧めたほうがいいわけです。

・・・というような例を考えたんですが、これも変に誤解しそうなので注釈に持って行こう

ハトのLINEスタンプ作ったメモ

淡々とまとめる。

store.line.me

完全に思いつきで作った。

スタンプは最小で8個から販売可能。あとは8の倍数。実際は8個のスタンプはあんまりなく、実質最低16個の雰囲気。

・作成期間:5日ぐらい

・申請日:2018/12/27

・承認日:2019/01/14

・ステータスの変化;申請処理中→申請中→承認

・使用ソフト:inkscape

年末年始ということもありそこそこ時間かかった模様。

コピペで使い回しが多かったんですが、リジェクトされなかった。昔よりはだいぶ審査緩くなったのかな?

 

その後、画像にタグ付け。

タグは指定のタグから選択して1画像に最大3個つける。タグから絵を描くと効率的かも。

こちらは半日程度で承認。

 

発売から5日たち、売り上げは10個ぐらい。(ほぼ知り合い)

LINEスタンプはランキングなどがあまり充実しておらず、自然に売れるというのはあまり期待できない模様。

ブログやSNS知名度ないとLINEスタンプ億万長者は無理かも。

 

「ザ・ファシリテーター」読んだ

どうやら最近、ファシリテーション的な能力が必要な気がしてきたので、ざっくり概要を掴めそうな本を読んでます。

ちょっと古めですが、ザ・ファシリテーターという本を読んだので読書日記を書いておきます。

www.amazon.co.jp

ザ・ファシリテーター

 

まず、この本はノウハウ集的なものではなく、小説のようなスタイルになっています。

仕事現場でのビジネス・組織改革の物語になっており、ビジネスの現場での活用イメージが少なからず掴めると思います。ファシリテーターの役割やその活用の結果として、組織にどういう変化が起こっていくかということをわかりやすく物語にしたものになっています。一冊を通してしっかりとした物語になっているため専門書とは違って一気に読みやすいです。

 

これ一冊を読んだからといっていきなり多くの手法の知識を得られたりファシリテーターとしての立ち回りができたりというものではありませんが、ファシリテーションで何ができるの?何をしなければいけないの?といった目的や成功のイメージが持てるという意味ではとても良い本と思います。

ただし注意として、物語の中ではファシリテーションのためのフレームワークや手法など(プロセスマッピングとかSWOTとか)も登場しますが、手法自体にフォーカスしているわけではなく、サラッと出てくるだけなので、詳細や詳しい実践法を知りたい場合は別の書籍と合わせて読むのが良いです。

ということで同著者の「ファシリテーターの道具箱」も読んでいるので、一通り読んだらまた日記書きます。

 

ふろむださんの本読んだ

今日は珍しく読書日記です。

ふろむださんの「人生は、運よりも実力よりも「勘違いさせる力」で決まっている」を読みました、という日記です。

本はこちら。

www.furomuda.com

人気ブロガーさんの本とあって注目度が高く、いろんな方がレビュー記事を書かれていますね。

内容としては、おそらく誰もが経験的には感じてはいるであろう「人からの印象」とか「思い込み」がどのように作用しているのか、さらには「勘違いさせる力」として表現しているそれらの現象をどう使っていけばいいのかということを読みやすくまとめたものになります。

 

あ、自分は書評とか書いてる人でもないし、そもそも何か月振りに本読んだんだろうぐらいの人間なので本の評価うんぬんは書かずに読書日記としてだけ書いていますのでご了承ください。

そんな自分でもささっと読める本ですし、学問的な難しい本でもないので読んでみるのもよいと思います。今なら上記のページで一部公開されてたりするようですし。


さてと、勘違いさせる力磨かなきゃ。。。

異常検知手法のお勉強記事ができるまで その2

その1の続きです。

 

前回までのお話

ブログのアクセス数推移をネタに異常検知をやってみよう。

ARIMA+回帰で予測して、予測値と実測値の差を評価したら良いんじゃなかろうか。

 

早速実装してみる

データ作成

細かいコードは完結後にQiitaにでも書くとして、やろうとしていることはこういう感じです。まず、アクセス数データと今回考慮すべき休祝日データを引っ付けて準備します。

f:id:stkdev:20180120172314p:plain

こんなイメージ。

もし予測精度を求められるような場合(予測自体が重要な場合とかKaggleやオプトのコンペとか)はここで休祝日以外にもひたすら変数を作り込んだりします。

 

利用データ定義

どのぐらいのデータを使って何日先を予測するか、というのを決めていきます。

1年分とかを学習データにしてしまうとそれだけデータ貯まらないと使えないという応用しづらいロジックになりそうですし、7日分ぐらいで学習したところで一週間前の数値がそのまま出るだけのモデルになりそうです。

ということで1ヶ月分にして見ます。7日周期性が気になるので正確には28日分にしておきます。

予測範囲は次の日でいいですね。

 

余談ですが、予想なんて当然次の日(次の1コマ)が対象だろうと思われるかもしれませんが、ビジネスの現場では「いや翌日の予測値出されてもすぐには使えないので三日後の予測値をピンポイントでくれ」みたいなこともよくあります。

あと「数ヶ月後の予測値出してくれ」と言われてぐぬぬ、、、とか。

 

予測実行してみる

細かいコードは完成後に(略

model <- arima(data.ts[,1], ←時系列のデータ列
 order = c(7,1,7), ←モデルのパラメータ
 method = "ML",
 xreg = data.ts[,2], ←休祝日のデータ列
 seasonal = list(order=c(0,0,0), period=NA))

 R言語の例ですが、関数一発でできちゃうので非常に楽です。

 

f:id:stkdev:20180120175244p:plain

図は実測(黒)&予測(青)のグラフですが、実際には28日分のデータから翌日の点予測して、ズラしてまた予測して、ズラして、というのを繰り返します。

正直、思った以上に予測できてるなぁ、ARIMAすげぇ、という印象。

祝日部分もちゃんと考慮されてるっぽい予測値になっています。

 

異常部分を定義する

さて、予測値が出せたところでどのくらい差があれば異常とみなすかを考えます。

・単純に差をとる

 → アクセスが少ない期間と多い期間があるので閾値が決めにくい

・誤差割合でみる

 → これもその日のアクセス数によってだいぶ意味合いが変わりそう。

標準偏差を利用しよう

 → 予測モデルでは予測値に加えその点での標準偏差σを返してくれます。予測区間とか考えるときに必要なやつ。

 

ということで、時系列モデル難しくて理解が怪しいところも多々ありますが、3σを閾値にすれば1%ぐらいで起こりうる事象に線引きできそうです。

図はさらに閾値絞って、実測値が予測区間7σ以上離れていれば異常としてピックアップしたもの。

f:id:stkdev:20180120183715p:plain

ちょっと拡大率はあれですが、なかなか?良い?ではありませんか?(混乱)

(本音:一発目でここまでできるとは思わなんだ)

 

目に見えてアクセス数が跳ねているところは捉えられていそうです。

面白いのは急激に跳ねている部分の後は多少数値が荒れても異常として検知しない期間があります。学習期間の変動幅がでかくなりすぎて予測区間が広くなったせいでしょう。しかしそれは都合が良い気がします。実際、一度大きく跳ねた後に多少荒れるのは人間の感覚的にも新たな異常ではなく異常が収束する過程と捉えそうな気がします。(全部異常としたいということなら別手法がいるかな)

また、変化度合いが少なくても学習期間部分が一定なら検知されています。いい感じ。

 

あ、あれ?もうこれでよくない?という思いにかられながらも、次回以降もうちょっと頑張ります。

 

おまけというかTODO

時系列モデルは結構難しいので理解が追いついてないところが多いです。

このあたりを参考にどうぞ。

(結構できてないとこある気がするなぁ)

 

https://www.amazon.co.jp/%E7%95%B0%E5%B8%B8%E6%A4%9C%E7%9F%A5%E3%81%A8%E5%A4%89%E5%8C%96%E6%A4%9C%E7%9F%A5-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%BA%95%E6%89%8B-%E5%89%9B/dp/4061529080

 

異常検知手法のお勉強記事ができるまで その1

前回の続きです。今回から本編。

 

前回までのお話

課題:このアクセスデータから異常っぽいところをいい感じに見つけたいよ。

f:id:stkdev:20180120162121p:plain

なお、黒線は記事投稿タイミング。

 

手法調べる

まずは基礎知識をつけるため、グーグル先生に相談してきます。最近では情報もいっぱいありますし、コード付きで○○検知やってみた系の記事なんかもいっぱいあるのでありがたいです。

ただ、どうしても情報の質はバラバラなので注意が必要ですがその辺の話は置いておいて、参考になった情報を列挙。

www.slideshare.net

 

qiita.com

異常検知の基礎 | データ分析基礎知識

 

この辺りの記事は異常検知に対するアプローチ全般が綺麗にまとまっていて非常にありがたかったです。

 

今回の課題を念頭にスーパーざっくりまとめると

・色々アプローチあるけど、基本となるのは外れ値検出。いかにデータの集合を作るか。

・今回の課題は周期性や変動の顕著な時系列データなのでそのままいろんな手法にぶち込んでもダメそう

 

方針考える、1回目

調べた手法と今回の対象でデータから、どうアプローチするか考えます。1回目としているのは、どうせ一発で良い結果は出ないので試行錯誤する前提だからです。

また、わかりやすい手法で一回分析回してみて結果みて次決めるというのもよくやります。 

考察する

上記Albertさんのページでまさに時系列データに対する異常検知のページがあるので、見ていきます。

・外れ値検出

まず、為替チャートの例で挙げられているk近傍法による外れ値検出ですが、これは近い点との距離をみるもので、今回の課題のような平日と休日で顕著な差があるようなデータに適用してしまうと、平日休日ごとに検知してしまいそうです。

少なくとも曜日変動を除いてからやらないとダメそうです。

・異常部位検出

次に異常部位検出は、なかなか今回の課題に合ってそうです。しかし例では心電図のデータが使われているように周期性のきちっとしたデータに向いているものです。

今回の課題は周期性がきちっとしているように見えて祝日や三が日などを考えると微妙に周期性が異なっています。祝日が毎回検出されてしまいそうです。

・変化点検出

最後に変化点検出の例としてARモデルなどの時系列予測手法を使って、予測と実測の差をみるものが紹介されています。このやり方ですと、休祝日を考慮した時系列モデル+残差というやり方で今回の課題にも適用できそうです。

方針決めた 

まずは時系列予測+その残差を評価する方法にしてみます。

データ全体をみると増加していたり休祝日の影響が半端ないということから記事で挙げられているARモデルだけでは表現しきれないだろうということで、ARIMA+回帰でモデリングしてみることにします。 

さらに参考:

英語苦手であんまり読めてませんがこんな感じ。

ARIMA models with regressors

 

難しそうですが、R言語のライブラリに頼れば大丈夫!

 

・・・。

という感じで一発目の方針決めてるんですが、みんなこんな感じなのかなぁ。

教えて偉い人!

 

〜〜

 

異常検知手法のお勉強記事ができるまで その0

導入(本編が始まらない)

異常検知って結構ニーズあるんですね。

あんまり前書きをだらだら書いてもあれなので端折りますが、異常検知がしたいという要望をここ最近何度か見聞きしているので、来たるべき日に備えて手法周りを勉強しておく日記です。

で、いつもならだいたい形になったところでこのブログやらQiitaやらに書くんですが、今回はあえてまだ完成してない状態で試行錯誤日記を書いて見ることにします。

というのも昔、仕事で予測モデルやらアルゴリズムやらの話をお客さんに説明しているときに「予測モデルがどんなものかというのはなんとなくわかった、でもあなた方がデータの何をどう見て手法選択や組み合わせを作り上げていくのか、そっちの方が興味ある」的なことを言われたことがありまして。

確かにもしかすると手法そのものよりも試行錯誤中の状態の方がブログ記事としてのニーズもあるんじゃないかと思いまして。

なんかここまでの説明だけ見ると、いかにもデータサイエンティストやデータアナリストの人かな?という感じですが、そういう肩書きは1度もついたことのない普通のITエンジニアですので専門家でもなんでもないです、ご了承ください。

でも逆にいうとそんな普通のエンジニアにもこの手のデータサイエンス絡みの仕事が舞い込むぐらいには世の中のAIブームが続いてますなぁ。

 

あー、結局前書き長くなってしまった。

今回のテーマ

どこぞの綺麗なサンプルデータではなくて、ぐっちゃぐちゃの実データが使いたいので自分のQiitaのアクセス数でも使って見ましょう。いい感じに荒れてたと思うので。

本邦初公開。

f:id:stkdev:20180117232630p:plain

2016年から計測始めていて、見ての通り増加傾向があるというのとたまにアクセス数が跳ねることがあります。目に見えて増加している日以外にもなんとなく増えた気がするor減った気がするという日はあります。その辺りが検出できるモデルが作れればいいなぁ、という課題です。

 

異常検知はなかなか正解データというのが定義できないので評価は苦労しそうです。

今回のデータの場合、記事を投稿した日を異常な状態と評価していいかというとそうでもないですし、結局自分の感覚に添うかどうかという判断基準になってしまいそうです。

うーん、この辺りの評価もどうするんだろうなぁ。

まぁ異常と定義する状況が決められるならそれって異常検知できてるしなぁ。

 

と、手法云々に入る前に今日の日記力尽きました。次回に続きます。(たぶん)

 

あ、ちなみにこのブログのアクセス数は↑のグラフの20分の1ぐらいです。

平和でよろしい。

 

〜〜