BETA

知識0だった僕がデータ分析をこれまでどう学び、これからどう使うのか

投稿日:2018-10-13
最終更新:2018-10-24
※この記事は外部サイト(http://www.procrasist.com/entry/25-data-an...)からのクロス投稿です

データ分析ガチ勉強カレンダー最終日

自分のこれまで歩いてきた道を軽く振り返ったあと、自分が思う機械学習/データ分析のあり方について書き連ねたいと思う。あくまで一つの価値観として楽しんでもらえればと思います。

データ分析って何?状態から

データ分析業務を行うにあたって、まずはじめの難関は、言葉の壁だった。ほぼコンピュータと無縁の世界で生きてきた私は、「Linuxって何?Vimって何?」っていうのを毎日繰り返していた。

データ分析を実務で扱うには、アルゴリズムを知っているだけじゃどうしようもない。 列挙すると下記のようなものが必要になってくる((レベル感のばらつきはお許し下さい))

  • アルゴリズムを動かすプログラム、用意する環境(Linux, VM, サーバーなど)
  • サーバーでコードを動かすための知識、ネットワークの知識
  • 計算量の見積もり、高速に動かすための並列化技術
  • データのin/outを扱うDBやqueueのシステム
  • プログラムの死活を監視するシステム
  • 分析アルゴリズムの理解
  • 複数の処理に対応するトランザクションの知識
  • サービスとして提供するアプリケーションの知識
  • 複数人で開発を進めていくプロジェクト管理技術

などなど。。。今だからこそ、そこそこ俯瞰的に見られるようになってきたが、はじめはまるで言葉が分からなかった。

じゃあ、どうやって知識を獲得していったのか。 自分が意識的にやってたことを振り返ってみる。

やったこと

わからないところを聞くレベルに達するまで

はじめは、どこが分からないかすら分からない状態。質問しろといわれても質問できない。だから、下記のことを行っていた。

  • ひたすら単語をメモ帳にメモしまくって、ググる。飲み会の間も分からない単語はメモしてた。調べるたびに分からない単語が増えるけど、耐えるしかない。辛抱強くメモ
  • その道のもっとも簡単な本を専門家に聞く。サルでもわかるようなやつ。
  • 染み付くまで訓練を重ねる。一朝一夕でコマンドは打てるようにならない。Linuxコマンドなどは、lsさえ知らなかったので、無意識に基本コマンドが打てるようになるまで体に叩き込んだ。

そうすれば、ぼやっと聞きたいことくらいはわかるようになってきた。

わからないところが分かるようになると

ある程度のことが分かるようになると、このあたりから少しずつ楽しくなってくる。こういうときには、以下のことを意識していた。

  • 人に聞きまくる。わからないことだけじゃなくて、わかったことが正しいかの確認も込めて聞く。
  • 詳しい人が実際にコードを書いたり、デバッグしている過程をよく観察する。結果としての物よりも、過程に知見が詰まっていることが多い。ショートカットの使い方だとか、バグ取りにつかっているコマンドとか。とにかく、観察して、盗む
  • 知っている範囲内の言葉で説明ができないか試みる。「これはつまり~~ってことだな。」と、自分の言葉で納得するまで考える。
  • 複雑な要素は根気強くほどく。世の中の大半が実は難しくなくて、簡単な要素がたくさん組み合わさっていて難しく見えているだけ。
  • 訓練を重ねる。自分がやっていることは大したことではないと思えるレベルまで、理解と実装を重ねる。

とにかく、自分の言葉で説明できるっていうのに重きを置いていたように思う。あとはやっぱり、ひたすら手と頭を動かした。

アルゴリズムをどう理解したか。

物理出身ということもあって、数式の理解には少し自信があった。なのでアルゴリズムの理解はいろいろな技術領域の中でも自分の強みとしたかった。

  • 大事な理論は数式レベルで理解する。基礎的な理解は低レイヤーでの思わぬつながりを産み、未知の状況に対する応用のロバスト性**が高いように感じる。ここの式をこういじれば...みたいなイメージができるようになると強い。
  • 実装はデータのinput/outputを重要視する。特にディープラーニングにおいては、ここはベクトルで入っているのか?それともスカラーなのか?はたまたテンソルかもしれない...それをうやむやにすると魔法の箱化してしまう。あくまで演算にすぎないという意識を持つ。
  • アルゴリズムは既存のものとの差分を意識する。何が変わったのか(精度向上、次元拡張、スピードアップ、対象拡大)、どうやって変えたのか(システムレベル、アルゴリズムレベル)などを意識して読む。

この中でも一番意識したいのは、魔法の箱じゃなくて、計算を行っているに過ぎないということ。だから、どういう計算過程なのかを強く意識した。そうすることで、何が出来て何が出来ないかがぼんやりと分かる。

自分が思う、これからのデータ分析

今まで分析業務に従事したり、一ヶ月間ガチで勉強してきたデータ分析を実務で使うものとしての視点で書く。

良いデータが集まるところに価値が生まれる

データ分析は料理みたいなものだと思う

  • データは食材、前処理は調味料、アルゴリズムは調理器具。
  • アルゴリズムはすぐに汎用化される。arXivにあげられた論文が1週間後にはgithub上で誰かが上げられている状況。
  • 調理器具の使い方をいち早く理解すること、元となるおいしい食材を集めるところが最重要課題。

つまり、データが集まるプラットフォームを作れるかどうかが今後のデータビジネスのカギとなってくると思う。メルカリとかお見合いアプリとか理想的だと思っている。人の心理をデータによって数値化できる基盤が整っている。特にスタートアップなどは、真似できないようなデータ収集プラットフォームをどうつくるか、ここに大きな労力を割くべきではないのかと思っている。

実務のデータ分析は高い精度よりも低コストと高い説明能力

現場において、ディープラーニングを果たして使うのか?というと、難しいのではと想像する。

  • 失敗原因がわからない怖さ
  • コストと納期の関係

が原因。実際データサイエンティストの泥臭いフィーチャーエンジニアリングの過程は、それ自体に価値があったりする。だからこそ現場の最前線でロジスティック回帰((回帰の最も簡単な手法))が用いられる。一方で分からないけどいい結果というのは、なによりもクライアントの不安を増長する恐れもある。

でも、だからといって、ディープラーニングが使われないのは、あまりにもったいなさ過ぎる。 あれだけの精度をわけも分からなく産めるものを、今後実務で使うためには、結果を説明出来る技術が必要だと思う。 機械学習の意味付けの研究はこれから実務的にも重要で、発展していくのではないかと思う。((発展していって欲しい。))

データ分析はトップダウン

物理をやっていたものからすると、ボトムアップ的アプローチも利用していきたいものである。

  • データから推論できること、出来ないことをはっきりさせる
  • システムの隠れた状態などをうまくモデリング出来たら、強い
  • トップダウン的に分析し、ボトムアップ的に仮説を立てて実験をすることで、より本質的な理解となる

と思っている。 大量のデータがあって、それを魔法の箱に突っ込めがなんかしらの良い結果が出る時代にはなってきている。 しかし、データに頼りすぎず、どこが本質的に重要かをミクロな観点から見極めながら、分析できる能力は身につけておきたい。

あくまで人間の補助、人間とのシナジーを考える

最後に、私はあまり人間が得意なことを機械でやらせようとは思わない。 そういうことに労力を割くよりは、機械が得意な領域を磨いていくほうが、生産性が高いと思っている。

意思決定、連想、ばかみたいな発想、人との関わり。こういうのは人間が得意とするところだろう。 データ分析はこれを最大化する方向に利用したい。

  • 自動化できるところ、自動化出来ないトコロを明確に
  • 事務作業は自動化で良い。サービス的な要素は消えない。
  • 職人が自発的にひねり出したアイディアは、独創的で面白い

まとめ

とりとめもなく終わりますが、これが数年間データ分析技術を学んで、また現場で実践して考えているところです。 自分が数年後道を見失ったときに読み返せるようにと、書いてみました。

技術の進歩は著しく、データ分析の技術はこれからますます楽しみになっていきます。 それについていけるようこれからも精進していきたいと思っています。

これまでのアドベントカレンダーをマージして、ゼロからデータ分析を学べるようなサイトマップを作りました。

Pythonでゼロから機械学習/データ分析を学ぶためのサイトマップ

データ分析に興味を持った方は、コチラで勉強してみてはいかがでしょうか。ではでは。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@hokekiyooの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!