いっしきまさひこBLOG

AI・機械学習関連、Web制作関連、プログラミング関連、旅行記録などなど。一色政彦。

統計検定2級に合格! 私の勉強方法と試験対策

ちょっとずつ閲覧数が増えてきたので、2級合格までに実践してきた勉強法と試験対策について大幅に追記しました(2020年3月24日)。元々書いていた「 2級合格体験と今後の目標」は後ろに回しました。

理解するための勉強方法

私の場合、理解するための勉強と試験対策は違う勉強の仕方が必要だと感じました。まずは2~3カ月かけて基礎をしっかりと理解すること。その根幹となるのが、正規分布関連から、カイ二乗検定、T検定までを完全に理解することです。これを行うために、以下の順番で勉強しました。特に「完全独習 統計学入門」は真剣に読み込みました。

予備校のノリで学ぶ「大学の数学・物理」【確率統計】再生リスト

ここまでで50%ぐらいの勉強が完了です。この後、次の公式書籍にざっと目を通して、試験を受けるには全然知識が足りないことに慌てました。

基本的には、あまり評判の良くないこの教科書で勉強しましたが、補足で下記の動画やWeb記事を読んだりしました。

とりあえず勉強はここまでで100%です。一通り理解したら、すぐに試験対策に入った方がいいです。試験対策の期間が長いほど有利です。

試験対策

試験対策で最初に取り組んだのが、下記の書籍です。Kindle Unlimitedにより無料で読めたからです。タダだからと思って何気に読み始めたら、これが非常に秀逸でした。実は、上記の勉強の後半で足りなかった部分の大半はこの本で身に付けたといっても過言ではないです。

でも試験対策に乗り出したのが、試験の2週間前で、もっと効率的に学びたい、と思っていたところ、下記の動画コンテンツ(いずれも Yuya.K_ASN 氏のYouTubeチャンネル)を見つけました。これが上記の試験対策本を超えて優秀でした。これを試験の2カ月前から繰り返し視聴すれば、合格は間違いないと思います。

※これらが扱っているのは過去問です。視聴するには、過去問の本も購入する必要があります。

また、Yuya.K_ASN 氏のYouTube動画では、「どの問題でどの検定を使うか」などの資料に、下記の本を使っていますね。一応、私も買いましたが、演習問題は解いてないです...。

もし最短かつ最安で2級に受かることだけを考えるなら、過去問を買って、Yuya.K_ASN 氏のYouTubeチャンネルの「【2017年6月】統計検定2級解説」再生リストだけを繰り返し視聴すれば、余裕で受かると思います。でも、目的としてしっかりと統計学を身に付けたい場合は、地道に勉強していくことをお勧めします。

以上、自分が感じている「これを勉強したら合格できるよ」という内容の暴露です。せっかく方法を公開したので、誰かのお役に立てればうれしいです。

2級合格体験と今後の目標

2019年11月24日(日曜日)に統計検定2級を受験して合格。本日、Webで合格発表がありました。

AI・機械学習をやるうえで必須かと思い、今年の6月ぐらいから徐々に統計学の勉強を始めました。 統計学を学んでみると、「機械学習のこれは、統計学のこれのことか」と気付くことが多く、勉強して良かったと思っています。

もう一つの収穫は、統計学の基礎が理解できることと、実践にまで応用できることには開きがあると、実際の問題を解き始めて気付いたことです。 実際に問題を前にすると難しく、まだまだだと反省させられます(慣れてくると、問題パターンから解答パターンがある程度は見えてきてしまう感じがしましたが……たぶんそれは2級レベルだから。準1級、1級はもっと難しいのかと)。

ちなみに2級の合格率は43.7%ぐらいみたいです。→参考:受験データ 2018年6月17日試験|統計検定:Japan Statistical Society Certificate これが準1級の合格率になると20.2%と半分以下にまで下がるのでかなりの難関みたいです。今回のようなつけ刃は通用しないと思うので、もう一度、2級までの内容が完璧になるように、再学習してから、来年6月の準1級の試験に臨みたいと思います。

最終的には1級取得を目指しています。できれば1年後...。

「確率的」を意味する「Stochastic」と「Probabilistic」(Probability)は何が違うか?

「確率的」とは、英語では「stochastic」もしくは「probabilistic」と表現されます。どう使い分ければよいのでしょうか?(どう違うか非常に迷ったのですが、良い資料もヒットしないので、理解したことを書いておきます。)

「何%の確率」(=イベントが発生する可能性の高さ)などという一般的な意味の「確率」は、英語で「probability」です。その関連用語(形容詞化?)が「probabilistic」(確率的)です。確率(probability)に関する数学の一分野は、「確率論」(Probability theory)と呼ばれます。

一方、統計分析において「ランダムに決定するプロセスであること」は、英語で「stochastic」です。日本語では、同じく「確率的」と訳されますが、、むしろ「確率論的」という訳語の方が適切かもしれません。というのも、「stochastic」の「ランダムに決定するプロセス」は、確率論(Probability theory)に基づく考え方であるためです。つまり「stochastic」は、あくまで確率論の一部であり、特に「ランダムであること」が重要なのです。

「probabilistic」には、「ランダム」の意味はなく、シンプルに「イベント発生の可能性であること」だけを示しています。そこが両用語の使い分け基準になるかと思います。

ちなみに、「probabilistic」(確率的)と「probability」(確率)は意味が共通的です。しかし、「stochastic」の名詞は「stochasticity」で「偶然性」という意味になり(いわば「ランダム性」を格好よくした単語で)、「stochastic」(確率論的)と意味が少しズレて、より「ランダムであること」が強調された意味なのでご注意ください。

AWS re:Invent 2019 re:Cap | AI/ML 聴講ノート

※これはセミナー聴講時の個人的なノートをそのまま公開したものです。誤字誤植や勘違いがある可能性があるのでご了承ください。

  • AWS re:Invent 2019 re:Cap | AI/ML - connpass
  • アンケート回答者はプレゼント資料をダウンロードできた(手元に資料あるけど、メモのみ共有)
  • じっくりと説明するというよりは速報的に次々と説明があったので、気になった部分だけメモりました

AWSのAIサービスに関するアップデート

Amazon Rekognition Custom Labels

Amazon Comprehend

  • 日本語対応

Amazon Transcribe

  • 日本語対応

Amazon Transcribe Medical

  • 医療向けの高精度な音声文字起こしサービス
  • まだ英語のみ

Amazon Kendra

  • 機械学習を利用した高精度な文書検索
  • まだ英語のみ

Amazon Fraud Detector

  • 機械学習による不正検知サービス

Amazon CodeGuru

  • コードレビューの自動化と性能改善のためのガイドを行う開発者向けのサービス

Contact Lens for Amazon Connect

  • コンタクトセンターにおける業務をAIで効率化するためのサービス

AWSの機械学習ハンズオンのためのサービス

DeepComposer

DeepRacer

  • ステレオカメラなどいろいろアップデート

Amazon SageMakerのアップデート

Amazon SageMaker Studio

  • SageMakerの各機能を呼び出せるWeb上の統合開発環境
  • 対応リージョン:オハイオ

Amazon SageMaker Autopilot

  • 表データに対して分類/予測を行う機械学習のAutoML機能
  • 東京リージョンでも利用可能

Amazon SageMaker Processing

  • SageMaker Pricessing SDK
  • データの前処理/後処理をバッチで行える機能

Amazon SageMaker Debugger

  • SageMaker Debugger SDK
  • 学習時の異常出力などの問題(勾配の消失など)を検出
  • TensorFlow、Keras、Apache MXNet、PyTorch、XGBoost などに対応
  • テンソルの急激な増加や消滅(NaNまたはゼロ値に達するパラメーター)、勾配の爆発や消滅、変化しない損失などの一般的な問題

Amazon SageMaker Experiments

  • SageMaker Experiments SDK
  • 学習を改善するための試行錯誤を支援する機能

Amazon SageMaker Model Monitor

  • MLモデルの品質を維持する機能

Amazon Augumented AI

  • 推論結果を人間が修正するワークフローを構築する機能

Amazon SageMaker Operators for Kubernetes

Deep Graph Library (DGL) がSageMakerで利用可能

AWS Step Functions Data Science SDK

Amazon AthenaでSQLクエリからML実行

Amazon Aurora Machine Learning

マルチモデルエンドポイント (MME) が利用可能に

MLインフラストラクチャのアップデート

Inf1インスタンス

  • 機械学習の推論を低レイテンシかつ安価に実現する推論用チップ「AWS Inferentia」を搭載した新インスタンス

AWS Inferentia

  • AWSによる独自設計推論プロセッサ

AWS Neuron SDK

  • AWS Inferentiaで実行するにはコンパイルが必要

Amazon Braket

読書感想『やり抜く力 GRIT(グリット)』

書籍紹介

 2016年9月出版の本ですが、audiobook.jpで人気だったので聴いて&読んでみました。Audible版やKindle版もあります。

 オーディオブックの再生時間は12時間6分。そこそこ多い文量です。

概要紹介と感想

 内容としては、才能や能力よりも「やり抜く力」(=「GRIT(グリット)」と呼ぶ)の方が大事ということを、研究例を用いたりしながら解説する本です。

  • PART 1 「やり抜く力(グリット)」とは何か? なぞそれが重要なのか?
  • PART 2 「やり抜く力(グリット)」を内側から伸ばす
  • PART 3 「やり抜く力(グリット)」を外側から伸ばす

という3部構成で、パート1で理論を知り、パート2とパート3で理論の実践方法について言及しています。

 理論については納得のいく内容だと思います。粘り強く頑張る人が、結局は活躍していくものだと思います。しかし人はとかく、「あの人は頭が良い」「私には才能がない」などと、無意識のうちに「才能・能力の高い/低い」を重要視してしまいます。IQや授業の理解度とかを見て、「この人はこの人よりすごい」というように判断しがちです。しかし最終的に勉強ができるようになるのは、理解が悪くてもしつこく質問する子供だったり、最初は「この人は才能がないな」と思った人でもその後の粘り強い頑張りで人並み以上に成長していったりします。グリットの高さ(=グリッドスコア)こそ、人の活躍可能性を測れる指標ではないかと。そう思わされます。

 よくよく考えて見ると「そりゃそうだよね」と思う内容です。なので内容に新規性はありません。むしろあらためてそこに気付かせてくれる本なのかなと思いました。

 実践については、子育て、子供への教育についての説明が印象的でした。子供への教育方法について考えてみたいと思う人は、参考までに手に取ってよい本だと思います。

 ただし、実践のための結論や具体的な手法を提示しているわけではないと思います。よって、自分で「グリットを伸ばす方法」を考えて、自分で実践手法にまで落とし込む必要はあります。もちろん誰にでもフィットする銀の弾丸などないのだろうから、それは当然だろうと思いますが、「結論や手法が教えて欲しい。何も考えずにその通りにやるから」っていう人には向かない本かなと思います。

 以下、引用しながら、私自身が気に入った内容をまとめていきます。

なぜ「やり抜く力」が重要か?

 わたし自身は何にも才能があるわけではないけれでも、「考えれば思い当たるところがあるよな」と思ったのが次の文章(引用)です。

だが、成功の要因はそれだけではなかったのだ。インタビューで多くの人が語ったのは、ずば抜けた才能に恵まれながらも、能力をじゅうぶんに発揮しないうちに、挫折したり、興味をなくしたりして辞めてしまい、周囲を驚かせた人たちの話だった。
失敗しても挫けずに努力を続けるのは――どう考えてもたやすいことではないが――きわめて重要らしかった。「調子のいいときは、やたらと意気込んでがんばる人もいますが、そういう人はちょっとつまずいただけで、とたんに挫けてしまうんです」

 子供の時、水泳が得意だったけど、途中で辞めました。その後、小学校で水泳の選手にもなったけど、そこそこ頑張っていたと思いますが、それもそこそこ。水泳がすごく好きというわけでもなかったのだけど、上の文章の内容はちょっと当てはまるのかなぁとは思います。

 次の文章もあるあるかもしれません。

どうやら、ただ数学に向いているだけではよい成績は取れないらしい。数学の才能があるからといって、数学の成績がよいとは限らないのだ。
これは私にとって驚きだった。一般的に数学は、数学的な才能のある生徒ほどよくできて、数学の苦手な生徒との差が著しいと考えられている。正直なところ、私も最初はそう思っていた。呑み込みの速い生徒は、つねにほかの生徒たちよりもできるはずだと思っていた。それどころか、もともと数学の得意な生徒とほかの生徒たちの成績の差は、大きくなるいっぽうだと思っていた。

 しつこく粘り強く数学に取り組む人が、結局は成績が良いようです。「僕は頭が悪いから分からない、できない」と言う人はやはり、数学の成績が良い人よりも、数学の勉強を真剣に長い時間やっていないのではないかと思います。

 このような才能を重要視して、努力を軽視するのは、ついついやってしまいがちです。例えば次の文章は、全国調査の質問とのことです。

「成功するためには、才能と努力のどちらがより重要だと思いますか?」
アメリカ人の場合、「努力」と答える人は「才能」と答える人のおよそ2倍だ。運動能力に関する質問でも、同じような結果が出る。では、つぎの質問はどうだろう?
「新しい従業員を雇うとします。知的能力が高いことと、勤勉であることでは、どちらのほうが重要だと思いますか?」
この場合、「勤勉であること」と答える人は、「知的能力が高いこと」と答える人の5倍近くにものぼる。

 いや分かりますよね。例えば自分が採用担当で、人工知能エンジニアを雇いたい場合に、「東京大学の博士課程出身で、こんなことができます」という人と、「とにかく独学で頑張った結果、こんなことができます」という人がいたら、「こんなこと」が同じレベルだとしたら、やっぱり前者を優先してしまうのではないかと。無意識のうちに「才能」の方を重要視してしまう。でも本当は、上で書いた通り、やり抜く力が強い方がより良い結果を出しやすい。難しいもんです。

才能と努力による「達成」の方程式

 著者は「達成」に関する論文を書いたそうです。その論文には、「達成」に至るまでの過程を説明する単純な方程式が示されているとのこと(図は自作して引用)。

f:id:misshiki:20191204195504p:plain
「達成」を得るには「努力」が2回影響する

「才能」とは、努力によってスキルが上達する速さのこと。
「スキル」は、「努力」によって培われる。
「達成」は、習得したスキルを活用することによって表れる成果のことだ。

 つまり、才能をバネに努力すれば効率的にスキルが身につく。通常はこれが目立つので才能重視になるのでしょう。しかしそれだけではないというのが著者の主張だと思います。

 スキルを使ってさらに努力すること。これによって人は生産的になり、達成をつかめるのだと。「才能」と「努力」を区別して、「スキル」に対しても「努力」が必要だと考えるのが大事なようです。

「情熱」と「粘り強さ」を発揮して目標を達成する方法

 ここで「グリットスコア」という「やり抜く力」の計測方法が出てきますが、ぜひ本を買うなどして確かめてみてください。

 で、「やり抜く力」を高めるにはどうすればよいか。著者はウォーレン・バフェット氏の発言を紹介して「優先順位を決めるための3段階方式」を示しています。

  1. 仕事の目標を25個、紙に書き出す。
  2. 自分にとってなにが重要かよく考え、もっとも重要な5つの目標にマルをつける(5個を超えてはならない)。
  3. マルをつけなかった20個の目標を目に焼き付ける。そしてそれらの目標には、今後は絶対に関わらないようにする。なぜなら気が散るからだ。よけいなことに時間とエネルギーを取られてしまい、もっとも重要な目標に集中できなくなってしまう。

 これは「やらないこと」を決める作業ですね。

 これを著者はアレンジして、

 4. 「これらの目標は、共通の目標にどれくらい貢献するか」と考える。

という項目を追加し、目標をピラミッド形に描くことを推奨しています(図はカスタマイズ版を自作して引用)。

f:id:misshiki:20191204195547p:plain
左にいくほど重要な目標になる

 ややもすれば中位の目標だらけになってしまいます。キモは、「最上位の目標」を決めることです。

 そしてピラミッドから外れる関係のない目標は削っていきます。何でも必死に頑張っても意味がないですから。この「中位の目標」が5個でよいと思います。

 そして中位の目標を達成するための具体的なTODOリストを「下位の目標」として記載すればOKだと思います。このピラミッドによって、すべての目標が関連性を持つことになります。

スキルを伸ばす方法

 スキルを伸ばすには、最上位の目標に向かって努力を粘り強く続けるしかないと思います。しかしそれだけでは不十分です。効率よくスキルを高めるにはどうすればよいか。これに関して著者は次のようなヒントを書いています。

ふつうの人びとと違って、エキスパートたちは、ただ何千時間もの練習を積み重ねているだけでなく、エリクソン(認知心理学者のアンダース・エリクソン氏)のいう「意図的な練習」(deliberate practice)を行っている。
1. ある一点に的を絞って、ストレッチ目標〔高めの目標〕を設定する。
2. しっかりと集中して、努力を惜しまずに、ストレッチ目標の達成を目指す。
3. 改善すべき点がわかったあとは、うまくできるまで何度でも繰り返し練習する。
では……そのあとは? ストレッチ目標を達成したあとは、どうするのだろう?
エキスパートたちは新たなストレッチ目標を設定し、弱点の克服に努める。小さな弱点の克服をこつこつと積む重ねていくことが、驚異的な熟練の境地に至る道なのだ。

 これをどう読み解くかは人それぞれだと思いますが、わたしは「改善」と「弱点克服」をコツコツとやっていことが鍵なのだろうなと感じました。自分は満遍なく全部やってしまうことが多いです。しかし、弱点克服に集中して、弱いところを潰していくように努力する方がより良いと、この本を受けて考えています。わたしはそのように、上記の引用部分を読み解きました。

 弱点は取り組むのが大変だから弱点になっている可能性が高いです。著者は「ラクな『練習』はいくら続けても意味がない」と言及しています。

 著者は日本語の「七転び八起き」という言葉が好きだそうです。その精神で努力し続けるようにしたいですね。

この本のオススメ度

 スポーツ選手の話も出てきますが、頻繁に子供の教育の話が出てきます。というか私の印象によく残っています。よって、前述したことの繰り返しですが、「子供の教育はどうすればよいか」と考えている人が、思考材料として読みたいというなら最適ではないかと思います。

 繰り返しますが、とかく人は努力ではなく、才能を優先します。子供も同じで、例えば算数の成績が思ったよりも悪いときに、

「努力が足りなかったから」ではなく、「能力が足りなかったから」失敗したと思う生徒

が多いのではないでしょうか。人の努力は見えにくいものです。だから、能力のせいにしてしまう。しかし「能力が低い」と考えた子どもたちは「無力感」にさいなまれるようになり、さらに努力(この場合は算数の勉強)をしなくなってしまいます。

 よって逆に成績が良かったときにも、能力・才能ではなく努力を褒めるべきです。例えば「算数ができるね! 頭良いね、さすが」ではなく、「よく努力したね、すばらしい」のように。このような「成長思考」「やり抜く力」を伸ばす表現が、本書の中でまとめられていますので、ぜひ購入して確かめてみてください。

JuliaTokyo #10 聴講ノート

※これはセミナー聴講時の個人的なノートをそのまま公開したものです。誤字誤植や勘違いがある可能性があるのでご了承ください。


18:40-19:00 スポンサーセション


19:00-19:30 ごまふあざらし(@MathSorcerer)さん

Model inference using Julia


19:30-19:50 Shuhei Kadowaki(@kdwkshh)さん

Juno


20:00-20:30 眠気.jl(@julialangisthe)さん

  • MacBookしまってしまったのでメモなし

Juliaでシミュレーション高速化


20:30-20:50 ライトニングトークなど

  • MacBookしまってしまったのでメモなし

あんちもん2(@antimon2)さん

名古屋の勉強会事情

金子さん

hsugawa(@hsugawa)さん

  • 資料未公開

参加者プレゼントで3名のプレゼントに当たった

機械学習モデル解釈ナイト (エンジニア向け) 聴講ノート

※これはセミナー聴講時の個人的なノートをそのまま公開したものです。誤字誤植や勘違いがある可能性があるのでご了承ください。

モデル解釈の知識は浅かったので非常に良かったです。
2時間でかなり詰め込んだ感じがあったので、One-dayイベントでこのテーマで行けるのかなと思いました。
あとAutoML関連もよく知らないので、勉強会があるといいな。
(テーマに関係ないけど、DLLabって最近、運営体制変わってきたのかなって思っている。)

BlackBox モデルの説明性・解釈性技術の実装

表形式データ

  • 局所的な説明: LIME、SHAP、Anchors
  • SHAPがオススメ、Anchorsはライブラリが未整備などの欠点がある

画像データ

  • Grad-CAM、LIME、SHAP
  • Grad-CAMがオススメ、LIMEは使いづらい

テキストデータ(tf-idf)

  • LIMEでまずまず機能する

テキストデータ(BERT)

  • Attention
  • influence:説明したいテストデータと最も良く似た訓練データを1つ探す手法。日本ではあまり知られていないがオススメ

一般化線形モデル (GLM) & 一般化加法モデル(GAM)

  • 本セッションでは、最も古典的かつ重要な解釈可能モデルの一つである GLM と、その応用技術である GAM について、歴史とアルゴリズムを概観します。さらに、実際に解析する場面を想定し、GLM/GAM に対するモデル解釈で気をつけるべきポイントもご紹介します。
  • 山口順也氏 日本マイクロソフト株式会社
  • 一般化線形モデル (GLM) & 一般化加法モデル(GAM)

  • Linear Regression、GLM(Generalized Linear Regression)、GAM(Generalized Additive Model)、GA2M(Generalized Additive 2 Model)にフォーカスして話す

一般化線形モデル(GLM)

  • 歴史から: 1972年にGLMを定式化、1982年に教科書…
  • 誤差が指数型分布族の分布に独立に氏が従うことを仮定する統計モデル

一般化加法モデル(GAM)

  • 1990年に、GLMの問題点を受けて提案された統計モデル
  • GLMでは重み付けしていたスコアの計算をもっと柔軟に

一般化加法2モデル(GA2M)

PythonでのGLM/GAMの使い方


AutoML のモデルを Azure Machine Learning Interpret で解釈してみる

AutoMLとは

  • 機械学習のプロセスを自動的に処理するテクノロジー
  • パラメーターチューニングのところだけ自動化、アルゴリズム選択も特徴量エンジニアリングも自動化する 2種類がある
  • メリット: 試行錯誤が楽になる、AIの民主化、モデルを大量に生成できる

Azureが提供するAutoML

モデル解釈

Amazon Transcribeの日本語テープ起こしを試してみたけど...

Amazon Transcribeが日本語対応して、もしかして精度高いのではないかと期待して、とあるセミナーのセッション「30分」(日本語)を自動「テープ起こし」してみたけど、次のような結果でした。

f:id:misshiki:20191126121243p:plain
自動「書き起こし」結果

意味不明...。単語単語でところどころ拾えているところはあるんだけど、使いものにはならないね。これを修正するよりは、手動でテープ起こしした方がまし。

日本語の自動「書き起こし」はまだまだまともなものは出てこなさそうです。手動で書き起こしている最中に、自動「書き起こし」予測とかで入力を補助してもらえたりすると作業が効率化するんだろうか。そういうのないけど。