派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】ビジネス数学を意思決定の根拠や予測に役立てよう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを定期的に開催しています。

2019年1月25日のイベントでは「データのトリセツ~ビジネス数学の基本的な考え方~」を開催。

数学には苦手意識がある、今さら数学なんて、と思われる方もいるかもしれませんが、データ分析の現場ではもちろん、論理的に考える上で「ビジネス数学」は欠かせません。今回はビジネス数学が使われる場面や考え方を、増井さんに解説いただきました。

■今回のイベントのポイント
・ビジネス数学は意思決定の際の「根拠」に使える
・時系列データから未来を予測する
・データをもとに予測したら、行動を選択できる
 
【講師】増井 敏克さん
【講師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』『プログラマのためのディープラーニングのしくみがわかる数学入門』(以上、ソシム)がある。

なぜデータを使うのか

ビッグデータやデータサイエンティストといった言葉が多く使われるようになりましたが、多くの人は「自分には関係ない」と感じているかもしれません。その背景には、以下のような状況があり、「データ分析」という言葉に抵抗感があることが挙げられます。

・分析しても何が得られるかわからない
・データ分析のために専任の担当者を雇う余裕がない
・そもそも大量のデータなんて持っていない

ただ、今回取り上げるのは、このような大量のデータを扱って人間が気づかないことを発見する「データマイニング」のような内容ではなく、ビジネスにおいて意思決定をするときに求められる「根拠」として使う程度です。このような分析を行うときには、高度な数学や統計、プログラミングに関する知識は不要で、厳密に答えを求めるのではなく、ざっくりとでも実務に使える分析をすることが大切です。

データを扱うとき、公益財団法人日本数学検定協会が実施しているビジネス数学検定
https://www.su-gaku.biz )では、以下のような5つのステップに分けています。このコラムでは、主に「予測」と「選択」の部分について紹介します。

f:id:itstaffing:20190313135635j:plain

時系列データから未来を予測する

データを使う目的として、過去の傾向を元に未来のことを予測したい場合があります。このとき、これまでの経験から「予想」ではなく、データを用いて「予測」することが大切です。

予測によく使われるのは時系列のデータでしょう。一定の期間に渡って、定期的に取得したデータとして、売上や気温の変化、光熱費の使用量の推移などがあります。このようなデータを元に予測する方法として、「移動平均」がよく使われます。

移動平均は株価や為替などをグラフで表現する場合によく使われる方法で、次の図のような「13週移動平均」や「26週移動平均」などを見たことがある人は多いでしょう。移動平均の期間を長く取ることで、そのグラフは滑らかになり、長期的な傾向を見ることができます。

f:id:itstaffing:20190313135638j:plain
図)Yahoo!ファイナンスより引用

株価や為替は予測できませんが、私たちの身近な仕事であれば、ある程度予測できることもあります。ITに関する部分であれば、Webサイトへのアクセス数、プログラムの処理時間などの推移を見ると、過去のデータからある程度正確に予測できます。

移動平均はExcelなどを使うと、次の図のような計算式で簡単に求められます。

f:id:itstaffing:20190313135642j:plain

ざっくりとした値を推定する

時系列データ以外では、「フェルミ推定」を使う方法もあります。知っている知識を元に値を推測する方法で、実際に調査が難しい値でも論理的に概算できます。例えば、会議の中で「電子黒板」の需要を考えるような場面を考えてみましょう。

電子黒板を日本にある小学校に導入すると考えると、その数を推定することが必要です。この程度であれば、インターネットで調べれば簡単に数を調べられますが、自分の知っているデータを組み合わせて推定することがポイントです。

方法はいくつか考えられますが、ざっくりとした値は以下のような感じで求められます。

・日本の人口は…だいたい1億2000万人
・日本人の平均寿命は…だいたい80歳
→ 1歳あたりの人口は1億2000万人÷80歳=150万人

・日本の小学校はだいたい30〜40人学級
・1学年のクラス数は2クラスくらい
→1つの小学校で1学年の人数は75人

つまり、150万人÷75人=2万校。

実際、文部科学省の調査
http://www.mext.go.jp/b_menu/toukei/chousa01/kihon/1267995.htm )でも2万校くらいとなっています。上記は本当にざっくりした値の推定方法ではありますが、大幅にずれないことが大切です。

これが1000校や10万校、というように桁が違ってしまうようだと問題ですが、こういった推定ができると、知っている知識を組み合わせるだけである程度精度の高い推定ができます。

予測結果から行動を選択する

データを元に予測するだけでなく、複数の選択肢の中から1つを選ばないといけない場面もあります。このような場合には「重み付け評価」がよく使われます。例えば、携帯電話の機種を選ぶ場合、デザインや性能、価格やブランドなどを考えて選びます。

選択の基準が1つであれば簡単なのですが、複数の指標があると、すべてを満たすものはなかなか見つかりません。そこで、複数の指標に優先順位をつけて、順に重みを設定します。設定した重みと評価値から計算して重み付け評価を行うことで、複数の指標から1つの値に変換できます。

例えば、以下のように評価項目を点数化し、重みをつけると評価の高い機種を選択できます。

f:id:itstaffing:20190313140247j:plain

   機種A:5×3 + 2×4 + 4×5 + 3×4 = 55
   機種B:2×3 + 4×4 + 3×5 + 5×4 = 57
   機種C:4×3 + 3×4 + 3×5 + 4×4 = 55
   機種D:3×3 + 4×4 + 5×5 + 4×4 = 66 → 機種Dの評価が一番高い

このように、複数の指標がある例として、仕事で複数社から見積を取って比べる場合、プライベートで住宅を探す場合、など身近な場面も多くあります。この重み付け評価を行うには「優先順位を決める」ことが重要になってきます。

優先順位を論理的に決める

仕事で優先順位を決める場合、重要度や緊急度に応じて判断することが多いと思います。緊急度は期日などがあるとわかりやすいものですが、顧客からの要望などの場合、その重要度はなかなか決められないものです。

そこで、IT系でもよく使われる方法に「狩野分析法」があります。これは「あったとき」と「なかったとき」の両方の視点で考える方法です。例えば、「その機能があればどう思うのか」「その機能がなければどう思うのか」という質問について、「うれしい」「普通」「困る」のような選択肢を考えます(実際には5段階が使われるが、ここでは3段階とします)。

すると、優先順位は、以下の表のような順番で設定できます。つまり、一番優先順位が高いのは「あるのが普通だがないと困る」ものです。

f:id:itstaffing:20190313135645j:plain

この表を使って、優先順位の設定を考えてみましょう。例えば、スマートフォンを選ぶときに、「カメラ」「電子マネー」「ワンセグ」「音楽再生」といった機能のどれを優先するかを考えてみます。

私の場合は、次のような回答になります。

・カメラ:あるのが普通だが、ないと困る
・電子マネー:あるとうれしいし、ないと困る
・ワンセグ:あると嬉しいが、なくても普通
・音楽再生:あるのが普通だが、なくても普通

つまり、私の場合では「カメラ > 電子マネー > ワンセグ > 音楽再生」の順になります。これは人によって順番が異なると思いますが、さまざまな場面で応用が利く方法だと思います。

実際のビジネスにおいては、学校で学ぶ数学のように正解は1つではありません。正解がないかもしれません。しかし、なんとなく選ぶのではなく、根拠を持って説明できるようにするために、「ビジネス数学」はいまから身に着けておきたいものです。

【イベントレポート】効率化・評価UPのロジカルライティングとテクニカルライティング

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年1月18日のイベントでは「仕事を効率化し、評価を高める ロジカルライティングとテクニカルライティング入門講座」を開催。

仕様書や議事録、連絡メールなど、エンジニアも文章と無縁ではいられません。相手にわかりやすく、自分の考えが伝わりやすい文章を、どう書けばよいのか。テクニカルライティングのプロフェッショナルである高橋慈子さんを講師にお迎えして、わかりやすい文章の考え方から実践的な書き方まで、教えていただきました。

■今回のイベントのポイント
・自分の文章の弱点をチェックしよう
・わかりにくい文章の問題点を探る
・ロジカルシンキングを活用して組み立てる

【講師プロフィール】
高橋 慈子さん
東京農工大大学卒。技術系出版社を経て、テクニカルライターとしてフリーランスで取扱説明書の作成に関わる。1988年テクニカルコミュニケーションの専門会社として、株式会社ハーティネス設立。同代表取締役。企業の取扱説明書やマニュアル制作のコンサルティングや人材育成に関わるほか、大妻女子大学、立教大学、慶應義塾大学 非常勤講師なども務める。情報処理学会ドキュメントコミュニケーション研究会幹事。 著書に『技術者のためのテクニカルライティング入門講座』(翔泳社)、『人より評価される文章術』(共著・宣伝会議)、『SEの文書技術』(日経BP)など。

自分の文章の弱点をチェックしよう

今回のテーマは文章表現。いつもと少し違って、席の近い参加者同士が互いの文章の良い点を評価し合うなど、実際に文章を通じてコミュニケーションを図る試みも行われました。

まずは、自分の文章力を再認識するための自己評価シートの記入からスタート。10項目に1から4の点数をつけ、カテゴリごとの平均点を算出し、これにより、自分の課題が見えてくるそうです。

f:id:itstaffing:20190305112442j:plain
▲自分の文章力の弱点をさぐる自己評価シート

ここで確認した弱点を克服する取り組みにより、自分の文章力を改善し、見直しをしていくとよいそうです。また、自分だけでなく、他の人の文章をレビューする際は「この人はこの項目の中のどこが苦手なのか」を見つけ出すとよいとのこと。アドバイスをすること自体が、自身の文章力向上にもつながるのだそうです。

f:id:itstaffing:20190305112445j:plain
▲自己評価シートの点数により、自分の弱点を把握しておくことが大切。まずは足りない部分を磨いていく

現在、現場で求められているライティングスキルは、以下の3つだそうでうす。

・スピード
書くスピードでなく、読む人が短時間で内容を把握できることが重要。相手の時間を奪わない。

・簡潔で、完結している情報
目的に合わせた情報を盛り込む。前のメールなど、遡ってみないと分からないのはNG。

・英文にしやすいシンプルな和文
ビジネスの海外展開、職場スタッフの多国籍化に対応。長く、係り受けが複雑、主語述語がハッキリしない文章はNG。

文書作成は仕事の中で時間を使うものであり、生産性を低下させている要因の一つです。ライティングのスキルを磨くことで業務そのものの品質向上に取り組むことができ、ひいては個人や組織の評価を高めることにつながるそうです。

わかりにくい文章の問題点を探る

演習として、わかりにくい文章を直していきます。例として示されたのは「用語の説明文」と「社内メール文」の2つです。

f:id:itstaffing:20190305112449j:plain
▲わかりにくい説明文の例。この文章のどこがわかりにくさの原因なのかを考え、他の人と意見を共有する

f:id:itstaffing:20190305112453j:plain
▲わかりにくい社内メール文の例。こちらも同じく、わかりにくさの原因を探る

この2つの文章について、どこがわかりにくさの原因となっているのかを、参加者同士がグループで話し合い、考えを共有しました。参加者から出てきた意見には次のようなものがありました。

説明文のほうで挙げられた原因は、次のような意見がありました。

一文が長い
冗長(係り受け等)
用語が難しい
用語が統一できていない
クラウドベース
「することが可能になる」
クラウドコンピューティングとは
否定で始まるのはよくない

メールのほうで挙げられた原因は、次のとおりです。

「打合せ」「グループミーティング」等の用語不統一
ビジネス表現ではない(口語)表記がある
何が問題なのかが文面から読み取りにくい
誰宛てなのかがわからない
ミーティングの日程調整が主題ではないのか?
件名が内容と合致していない
文章の丁寧さの統一
日程の候補を載せたほうがよい
返信がいつまでに必要かわからない
所属とフルネームが必要なのでは?

こうして、いろいろな経験、立場の人たちが複数で目を通すことにより、自分では気が付かなかった問題点にも気づくことができました。

ロジカルシンキングを活用して組み立てる

よく「ロジカルシンキング」という言葉を耳にしますが、ロジカルシンキングとは、誰にでも理解しやすく、納得できるように組み立てられた思考のことを指します。ただし、「誰にでも」という部分について高橋さんは「受け手から見た筋道であることが重要」だと強調します。なぜなら、書き手から見た筋道では、押し付けになりやすいからです。

ロジカルシンキングは、考えを「見える化」するもの。ロジカルシンキングを行うことで、意志疎通が迅速になり、さまざまな業務の効率化が図れます。

では、どのようにロジカルシンキングを磨けばよいのでしょうか? 高橋さんのお勧めは、ロジックツリーで構造を整理することだそうです。

f:id:itstaffing:20190305112456j:plain
▲上図のように全体のロジックから筋道をつけていく。付箋紙を使って、書き出して、貼っていくなど、ホワイトボードを使うのも手。

これを議事録の文章作成に応用すると次のようになります。

f:id:itstaffing:20190305112500j:plain
▲議事録の書き方はさまざまですが、たとえば上図のように、話し合ったテーマごとにトピックで分ける方法ではなく、決まったこと、未決のことに分けて記録するのもやり方の一つ

こうした実践手法をふまえ、先ほどのメール文のリライトをしてみることになりました。文章のタイトルや件名は、あいまいな表現でなく、具体的なキーワードを入れるのがポイント。そして本文もわかりやすく整理します。事例のメールの背景は次のようなものとします。

f:id:itstaffing:20190305112503j:plain
▲メール送信の背景。ここからグループミーティング参加者全員に同報通知(CC)しているのではないか、と推察し、宛名を「グループミーティング参加者各位」とする参加者もいた

この背景をもとに、参加者が各自で書いたメール文を、グループのメンバーと互いに評価し合いました。メールタイトルに要返信の旨を記載したり、次回グループミーティングの開催日時の件と、納期確認の件を明確に切り分けて小見出しを付けて書いたりと、皆それぞれに工夫していて、どれもわかりやすいと感じました。

そして最後に、わかりやすい文章作成の実践的な手法として、重要な情報を見極める、キーワードを盛り込みながら書く、多めに文章を書いてから削る、パラグラフ単位で組み立てる、リード文(要約)を書くなど、いろいろな練習方法を教わりました。

f:id:itstaffing:20190305112507j:plain
▲重要な情報を見極め、キーワードを盛り込みながら書くことが大切。多めに文章を書いて、後から削るというのもテクニックの一つ

f:id:itstaffing:20190305112510j:plain
▲パラグラフ単位で文章を組み立て、パラグラフ同士や、パラグラフ内の文と文とのつながりを考える習慣を身につけると良い

高橋さんの推奨するもので、最もすぐに実践できそうなのは、「筋トレと一緒でたくさんの文章を書く」というもの。なかでも日頃から受け手のことを意識して文章を書くことができれば、特別な訓練をする時間の無い方でも、文章力を向上させることができそうです。

【イベントレポート】時給を上げ、引く手数多のエンジニアになるために必要なことを知ろう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2019年1月11日のイベントでは「『自分らしい働き方』を貫くための武器を手に入れる!〜単価を上げ、引く手数多のエンジニアになるために必要なこと〜」と題して、書籍『ITエンジニアのための【業務知識】がわかる本』の著者である三好康之さんを講師にお迎えし「業務に関する知識」という切り口から見たエンジニアの将来のキャリアについて解説していただきました。

■今回のイベントのポイント
・ITエンジニアにとっての壁
・SEからコンサルタントへ
・業務知識の学び方
・これからのキャリア形成について

【講師プロフィール】
三好 康之さん
株式会社エムズネット代表。大阪を主要拠点に活動するITコンサルタント。本業の傍ら、ITエンジニアに対して、資格取得講座や階層教育を担当している。保有資格は、情報処理技術者試験全区分制覇(累計30個,内高度系23個)をはじめ、ITコーディネータ、中小企業診断士、技術士(経営工学)、販売士1級など多数。著書も『勝ち残りSEの分岐点』、『ITエンジニアのための【業務知識】がわかる本』、『情報処理教科書プロジェクトマネージャ』(以上翔泳社)他多数。

ITエンジニアにとっての壁

企業では「売上アップがしたい」という一方で「労働時間は短縮させたい」という大きな矛盾を抱えています。

この問題を解決し、生産性を高める方法こそがITです。実際に、今では経理・財務はもとより、人事、生産、販売など、企業のあらゆる活動にITのシステムが入り込んでいます。しかし、現場の諸課題を解決するためには、ITの知識と業務の知識を兼ね備え、さまざまな改善提案が行えるITコンサルタントが必要になります。

多くの場合、企業が売上向上を図る際に、経営者はタスクフォースを結成して臨みます。

f:id:itstaffing:20190222105845j:plain
▲企業が売上向上を図る際に結成されるタスクフォースの例

エンジニアは、単なるシステム発注先ではなく、ITコンサルタントとして、こうしたタスクフォースに加わり、リードしていくべきなのです。

SEからコンサルタントへ

SEからITコンサルタントになれれば、単価が上がる可能性が高いのはもちろん、それ以外にも時間が自由になる、経営者から感謝されるなど、仕事の進め方もやりがいも大きく変わります。

f:id:itstaffing:20190222105848j:plain
▲SEからITコンサルタントになることで時間が自由になり、感謝されるなど、仕事の魅力も増える

そのための重要な要素について、三好さんは次の2つを挙げます。

・資格
・業務知識

たとえば情報処理技術者の資格には、プログラミングの力を問うものがあります。プログラミングの知識・経験は、コンサルタントにとって大きな強みになります。

「直接プログラムを作成するわけではなくとも、コンサルタント同士の間でのチカラ関係に影響します。プログラムの中身まで見据えられるとして一目置かれる立場になります」(三好さん)

「自分はプログラマではない」という方や「最新のプログラミング言語の知識はない」という方もいるかもしれませんが、三好さんによれば、それでも強みになるのだそうです。

「昔ながらのプログラミング言語を使っている人も、運用フェーズやサポートで関わっている人も、アレルギーがない分、チャンスが広がります」(三好さん)

最近ではパッケージソフトウェアを使ったり、主要サービスのAPIを組み合わせたりしてシステムを構築することも増えており、プログラミングをしないことも多いでしょう。だからこそ、重要になるのは業務知識なのだと三好さんは力説します。実際に、SAP社のERPパッケージソフトが日本に上陸し始めたとき、その導入の仕事を一番多く手掛けたのは、エンジニアではなく公認会計士だったそうです。それは、経理・会計等の業務に最も詳しい立場にいたからです。

業務知識の学び方

では、そもそも「業務知識」とは何なのでしょうか。そして、どのように知識を身につけていけば良いのでしょうか。

三好さんによれば、業務知識はその存在理由などから4つのレベルに分けられ、そのレベルに応じて学んでいくとよいそうです。

f:id:itstaffing:20190222105852j:plain
▲4段階に分けられる業務知識のレベル

まずはレベル1の法律で決められている業務。これは、企業としては腰が重い業務であり、したがって、業務の効率化が大きな課題解決になるのだそうです。法律に強いのはタスクフォースの中で言えば弁護士さんで、基本はともかく、法律の詳しい知識で弁護士を超す必要はありません。要するに、弁護士さんと普通に話ができればよいということです。

次に、レベル2のISOやJISで決まっている業務。これは、人によって、あるいは立場によって専門分野が違ってきます。やる、やらないは企業次第なので、提案だけできれば良い領域だそうです。このレベル1とレベル2は、顧客からすれば「知っていて当然」という部分。机上で事前学習しておけばOKです。

そしてレベル3の何かしらのメリットがあるから準拠する業務。たとえば、業界特有の取引ルールや業界規格などです。ここはOJTや経験で学んでいく部分であり、タスクフォースで言えば、経営コンサルタントさんの得意領域。「繊維業界20年」などという人が本領を発揮する領域なので、そうした人から情報を引き出して学んでいくのが良いそうです。

そしてレベル4の当該企業の創意工夫の部分。ここは経営者の領域です。そしてここがITエンジニアの活躍領域でもあります。自由度の高い業務であり、独自の工夫や取組みを行う部分で、顧客しか知らない情報もあるため、その都度確認しながら業務を組み立てていきます。技術をバックグラウンドにした、さまざまな提案も行えます。

すべてを押さえていればベストですが、レベル1とレベル4の両方を押さえている人も極めて少ないため、まずは、この両方を押さえておけば、大きな武器になるそうです。とは言え向き不向きもあるでしょう。

そこで三好さんが提案する業務知識の学び方のコツは、「興味のあるものは放っておき、興味のないものを積極的に勉強していく」というもの。興味のあるものは、自然に目が向き、放っておいても知識が身についていくけれど、興味のないものは、いつまでたっても身に付かないからだそうです。

これからのキャリア形成について

プログラミングができて、業務改善提案もできるという人は、中小企業の経営層から引く手あまたで、自ら強引に売り込んでいかなくても、挨拶を交わしただけで、後から探して見つけてもらえるプル型の人材として活躍できるようになるそうです。三好さんは、これをインバウンド戦略と呼んでいます。

f:id:itstaffing:20190222105856j:plain
▲探して見つけてもらえるITコンサルのインバウンド戦略

そして業務知識を学ぶタイミングですが、必要になる前に勉強していくことが大切だそうです。必要になる前ならば、時間も自由に使えるためストレス無く学べ、プレッシャーもかかりません。

f:id:itstaffing:20190222105901j:plain
▲必要ない段階で学んでおくとプレッシャーもかからない

また、いきなり実績を作るのは難しいという場合は、実績がなくてもキャッチアップできる方法として資格の取得があります。特に情報処理技術者試験は、業界でも知られていてかつコストがかからないという点で、三好さんもお勧めです。

先が見えない中で、将来のために何をしておけば良いか悩むことがあります。多くの場合、信頼のおける先輩、上司、親などに相談することでしょう。ただし、それらの人たちには、それぞれの立場に応じた利害関係があるので、その点は理解しておく必要があります。

もし、一つだけ確実だとすれば、それは国家資格です。情報処理技術者試験は、現場での評価は賛否あるかもしれませんが、間接的な影響は大きいので、取得しておいて損はないそうです。

いきなり業務知識を学ぶといっても、どこから手を付けて良いかわからない、ということも多いでしょうが、今回、三好さんからたくさんのヒントをもらいました。まず、必要になる前段階で、興味の向かないものから手をつけていくこと、そして資格取得はやはり大事だということで、早速行動してみましょう。

【イベントレポート】プログラミング初心者の最初の壁、環境構築について学ぼう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを定期的に開催しています。

2018年12月14日のイベントでは「プログラミングを学び始めるときの環境構築〜エンジニアが生き残るためのテクノロジーの授業」を開催。

プログラミングを始めるとき、最初につまずくのは環境構築。今回は増井さんに、手軽に試せる開発環境から、主流な環境の準備、便利な開発ツールなどを、主にPHPとJavaScriptでのWeb開発を目指す方向けにお話いただきました。レポートでは、PHPの環境構築について詳しく解説します。

■今回のイベントのポイント
・プログラミングを始めるときの悩み
・オンライン実行環境を試す
・PHPの環境を構築する
 
【講師】増井 敏克さん
【講師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』『プログラマのためのディープラーニングのしくみがわかる数学入門』(以上、ソシム)がある。

プログラミングを始めるときの悩み

プログラミングを学び始めるとき、どのプログラミング言語から学べばいいか迷うことがあります。世の中には非常に多くのプログラミング言語があり、作りたいシステムの規模や目的、実行する環境などによって最適な言語は変わってきます。

学生であれば、学校で指定された言語があるかもしれませんし、企業であればプロジェクトで使う言語が決められているかもしれません。このような場合は使う言語のコンパイラや実行環境を導入すればいいのですが、個人的に新しい言語を学ぶ場合には、どれを選んでいいのかわからないことは珍しくありません。

いろいろな言語を試してみるには、各言語の実行環境やコンパイラをインストールする必要があり、環境構築に時間がかかります。なかなか言語の勉強に入れず、結局どの言語も中途半端になりかねません。さらに、使ってみたけれど自分には合わなかった、という場合には不要なソフトウェアがコンピュータ内に残ってしまう、ディスクを大量に消費してしまう、などの状況もあるかもしれません。

開発環境を整えるために、どのようなツールを選べばいいのかわからない、という問題もあります。あるプログラミング言語を選んでも、エディタに何を使うのか、IDE(統合開発環境)は何が良いのか、などさまざまな疑問が出てきます。WindowsとMacでは動くソフトウェアが違う、他の人と環境を揃えられない、という問題もあります。

オンライン実行環境を試す

そこで、とりあえず言語の文法を試したい場合にはオンラインの実行環境を使う、というのも一つの方法です。最近はWebサイト上でソースコードを入力して実行できるサービスがいくつも登場しており、Webブラウザさえあれば簡単に試すことができます。

例えば、「Ideone」(https://ideone.com/)や「Wandbox」(https://wandbox.org/)といったサービスを使うと、多くのプログラミング言語を簡単に試すことができます。試したい言語をリストの中から選んで、ソースコードを入力し、実行ボタンを押すだけです。

f:id:itstaffing:20190212140439j:plain

また、HTMLとCSS、JavaScriptを試したい場合は「JSFiddle」(https://jsfiddle.net)のようなサービスを使うと、簡単にWebページのデザインや簡単なスクリプトを試せます。最近よく使われているJavaScriptのフレームワークであるAngular, React, Vue, Gatsby, Next.js, Node.js, Nuxtなどを試す場合には、「CodeSandbox」(https://codesandbox.io)なども便利です。

プログラミング言語だけでなく、データベースなども試したい場合は、「CodingGround」(https://www.tutorialspoint.com/codingground.htm)というサービスもあります。スマホアプリもあり、一部の言語ではオンラインでIDEを使うこともできます。

もしIDEをブラウザで試したい場合は、「Codeanywhere」(https://codeanywhere.com)や「Codenvy」(https://codenvy.com)、「AWS Cloud 9」(https://aws.amazon.com/jp/cloud9/)といったサービスを使うのもいいでしょう(ただし、会員登録やログインが必要になります)。

開発に使うツールを導入する

上記のような方法で開発に使うプログラミング言語を選んだ後は、本格的に開発を始めるために手元で開発環境を構築する必要があります。コンパイラや実行環境をダウンロードしてインストールするだけでなく、ソースコードを入力するために、テキストエディタやIDEが必要です。

テキストエディタとしては、古くからvi(Vim)やEmacsなどが使われてきました。最近では便利な機能を備えたVisual Studio Code(VSCode)、Atom、Sublime Textなどが人気を集めています。その背景には、プログラミングなどに便利な機能を多く備えていて、簡単に使えることが挙げられます。

例えば、「スニペット」と呼ばれる機能により、簡単に入力を補完できます。HTMLを入力するモードにして、「!」記号を入力したあと、Enterキーを押すだけで簡単にHTMLのテンプレートを使用できます。

f:id:itstaffing:20190212140443j:plain

このような機能を使うのに何の設定も必要なく、初期設定のままで用意されている、というのは初心者にとってメリットでしょう。

なお、一部のプログラミング言語では、IDEを使用する方法もあります。IDEを使えば、ソースコードの入力だけでなく、Javaなどで使われるEclipseやNetBeans、C#などで使われるVisual Studio、Objective-CやSwiftで使われるXcodeなどがよく使われています。スクリプト言語でも、PHPのような言語ではPHPStormやIntelliJ IDEAなど開発に便利な機能を備えたIDEが存在しますので、試してみるのもよいでしょう。

PHPの環境を構築する

今回はプログラミング言語として「PHP」を選んだ場合の環境構築を考えてみましょう。多くのレンタルサーバーで標準的に使える言語であり、Webアプリケーションの多くで使われています。また、入門書などの資料も多く、学びやすい言語だと思います。

PHPで開発するとき、手元のパソコンに環境を構築するにはいくつかの方法があります。Windowsの場合はXAMPPなどのツールもよく使われており、インストールするだけでPHPだけでなくWebサーバーやデータベース、FTPサーバーなども一括でインストールできます(https://www.apachefriends.org/jp/index.html)。

ただ、使わない機能も多く、必要な機能だけをインストールしたい場合には個別に導入することもできます。例えば、プログラミング言語のPHPそのものは公式サイト(https://windows.php.net/download/)からダウンロードして解凍するだけなので、インストールの作業は不要です。「C:\php」というフォルダに解凍して、図のように配置してみましょう。

f:id:itstaffing:20190212140447j:plain

コマンドプロンプトを開いて、「C:\php\php ––version」を実行すると、ダウンロードしたバージョンが表示され、正常に動作していることを確認できます。(より便利に使うには環境変数にパスを登録する方法もあります。)

PHPでWebアプリを手元で実行する

Webアプリを実行するには、Webサーバーが必要です。レンタルサーバーを使用する方法もありますが、手元で簡単に試すだけであれば、PHPの「ビルトインWebサーバー」を使う方法もあります。ビルトインWebサーバーはPHPに付属しており、ApacheやnginxといったWebサーバーソフトをインストールしなくても、開発環境として使うには十分なWebサーバーを起動できます。

「C:\php」にPHPをインストールしている場合は、プログラムを配置したフォルダに移動して、コマンドラインで以下のようにオプションとして「–S」を付けたコマンドを実行するだけです。

C:\php\php –S 127.0.0.1:80

これは、ローカルホスト(自分のコンピュータ)を表す「127.0.0.1」の、ポート番号80(HTTP)でビルトインWebサーバーを起動するコマンドで、ブラウザから「http://127.0.0.1/」または「http://localhost/」にアクセスすると、該当のフォルダにあるプログラムをWebアプリとして実行できます。

例えば、以下のようなファイルをindex.phpというファイル名で保存してみましょう。

< ?php

phpinfo();

このページをWebブラウザで開くと、以下のように表示できます。

f:id:itstaffing:20190212140451j:plain

Composerを使って様々な便利機能をインストールする

PHPのパッケージを導入する場合には、依存関係管理ツールであるComposerを使うと便利です。Composerは公式サイト(https://getcomposer.org)からダウンロードしてインストールします(公式サイトの「Getting Started」を選択し、「4. Installation–Windows」の「Composer–Setup.exe」を実行)。

Composerを使うと、さまざまな便利なフレームワークや機能を追加する場合も、コマンドを入力するだけです。例えば、最近人気のあるLaravelフレームワークは、以下のコマンドでダウンロードしてプロジェクトを作成できます。

composer create-project ––prefer–dist laravel/laravel [プロジェクト名]

また、PHPではコードの書式に「PSR–2」と呼ばれるルールがよく使われます。このルールに従っているか確認するために、php cs fixerなどのツールを導入することもあります。これを導入する場合も、以下のコマンドを入力するだけです。

composer global require friendsofphp/php–cs–fixer

php cs fixerはコマンドラインからソースコードをチェック・整形できるだけでなく、Visual Studio Codeなどのエディタにある拡張機能を使えば、エディタでの入力中に、ルールに従っているか確認できます。

このように、便利な機能の導入や管理が可能なツールが、最近のプログラミング言語では用意されていることが多く、簡単に設定できるようになっています。ぜひ業務内容や実現したいこと、好みなどに応じてプログラミング言語を選んで、実際に開発環境を作ってみてください。

【イベントレポート】『カイゼン・ジャーニー』から学ぶ、アジャイル開発とカイゼンの手法

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年12月19日のイベントでは「カイゼン・ジャーニー ボクが越境できたわけ ~たった一人からはじめて、「越境」するチームをつくるまで~」を開催。

書籍『カイゼン・ジャーニー』の著者である新井さんが、これまでに自身で実践してきた組織カイゼンの具体的な手法や、新井さんの勤務先、ヴァル研究所で部署を超えてカイゼンの取り組みを行きわたらせた実体験などを紹介してくださいました。

■今回のイベントのポイント
・アジャイル開発について
・カイゼンの手法
・わたしの実体験

【講師プロフィール】
新井 剛さん
株式会社ヴァル研究所 SoR Dept.部長、株式会社エナジャイル取締役COO、Codezine Academy Scrum Boot Camp Premiumチューター、CSP(認定スクラムプロフェッショナル)、CSM(認定スクラムマスター)、CSPO(認定プロダクトオーナー)。Javaコンポーネントのプロダクトマネージャー、緊急地震速報アプリケーション開発、駅すぱあとミドルエンジン開発、駅すぱあとエンジンの部門長などを経て、カイゼン・エバンジェリストとして全社組織をカイゼン中。同時に、アジャイルコーチ、カイゼンファシリテーター、ワークショップ等で組織開発にも従事。Java関連雑誌・ムックの執筆、勉強会コミュニティ運営、イベント講演も多数あり。

アジャイル開発について

「プロジェクトや組織でモヤモヤした問題あるよね?」と感じることは少なくありません。プロジェクトチームを組んでいても、メンバーが同じ時間に同じ場所にただ座っているだけの関係、いわゆるサイロ化された状態では、こうしたモヤモヤは解消されません。

新井さんは、まず、アジャイルという視点から、そうしたモヤモヤした問題をカイゼンサイクルを回しながら解決していく方法論について解説してくれました。

f:id:itstaffing:20190207102520j:plain
▲アジャイル開発とカイゼンサイクルのまとめ

大切なのは、早く軽く失敗して、次に生かすこと。これにより、精神的にも費用的にも時間的にも、無駄が発生せずに済みます。

そして「ふりかえりがとても大事」だと言います。いったん止まって考えることですが、これは失敗を悔いたり、内省や反省をしたりするのでなく、学びの機会、すなわち前進を意味しています。だからアジャイル界隈では「ふりかえり」を、ひらがなで書くことが多いそうです。

また、タイムボックス(期間の箱)で時間を管理することも忘れてはならないそうです。ポイントは、良い気づきの在庫を溜め込まないこと。「倉庫の中にあるものは何も価値を生んでいません。お客さんに届いて初めて価値を生むのです」という言葉にハッとさせられました。

「可視化」と「見える化」はニュアンスが違うというのもポイントです。「可視化」は単に見える状態にすることであり、「見える化」は気づきやフィードバックにつながり、行動につながるカタチにしたものだということ。何でも見えるようにすればよいわけではなく、雑音を取り除いて必要なもの(納期、コミュニケーション)を見えるようにする必要があるのだそうです。

書籍に出てくる手法

カイゼンと言っても、最初から組織単位で進めていくのはハードルが高いもの。そこで新井さんは自分一人で取り組む「ぼっち編」と、チームで実施する「チーム編」とに分けて紹介してくれました。

ぼっち編では、自身のタスクを管理していきます。朝会(といっても一人で行うのですが)で1日の計画を立てタスクボードに乗せ、タスクをマネジメントしていきます。そして定期的に「ふりかえり」を行うのも大切だそうです。

タスクボードは「TODO」「DOING」「DONE」という3つにプロセスを仕分けします。

f:id:itstaffing:20190207102439j:plain
▲タスクボードではプロセスを仕分けする

朝会では、1日の計画を立てます。決められた場所と時間に行うのがコツで、自分の1日のスケジュールなので10分程度でOK。ここで「昨日やったこと」「今日やること」そして「面倒だなと思うこと」を仕分けし1日の計画を立てます。

f:id:itstaffing:20190207102443j:plain
▲朝会のポイント

ふりかえりは1週間に1度、30分以内で行うのがコツだそうです。プロセスやプロダクトのカイゼン、問題の言語化・見える化を行います。

f:id:itstaffing:20190207102446j:plain
▲ふりかえりのポイント

タスクマネジメントで重要なのは、時間を味方につけること。タスクの分割や、誰かに渡したタスクの管理、ヌケモレの防止などを行います。

f:id:itstaffing:20190207102450j:plain
▲タスクマネジメントのポイント

チーム編では、期待マネジメントも重要になります。期待マネジメントとは、互いの期待のギャップを埋めていくこと。これは機を逃さず、ギャップがあると気づいたときに擦り合わせていくことが大切だそうです。

チームビルディングに当たって、新井さんがお勧めするのが、ドラッカー風エクササイズ。主語は自分で、何が得意で、どう貢献するかを自己表明し、仕事をする仲間の価値観を知ります。

f:id:itstaffing:20190207102453j:plain
▲ドラッカー風エクササイズで仕事をする仲間の価値観を知る

プロセスのカイゼンには「ECRS」という手法があります。これは排除・結合・交換・簡素化のそれぞれの頭文字をとったものです。

f:id:itstaffing:20190207102457j:plain
▲プロセスをカイゼンするECRSとは?

A⇒B⇒Cというプロセスがあるとき、ECRSでは次のようにカイゼン策を検討します。

f:id:itstaffing:20190207102501j:plain
▲プロセスカイゼンの考え方

わたしの実体験

ここまでは新井さんの書籍をベースにしたカイゼンの手法について学びましたが、今回は新井さん自身の実体験も聞かせてもらえました。

新井さんは、転職を2回、社会人になってからの海外留学を経験しており、ヴァル研究所は3社目になるとのことです。中途採用で後から職場にやってきた人が、職場の仕事スタイルをガラリと変えるのには相当な苦労があったのではないかと想像してしまいます。

転職や留学の経験から、同期がいない、知り合いゼロ、土地勘ゼロでのスタートを繰り返しており、みずから「ぼっち」を選んでいるのかと悩んだこともあったそうです。

f:id:itstaffing:20190207102505j:plain
▲新井さんのアジャイル~カイゼンへの取り組み

その第一歩は、ヴァル研究所に入社し、CI(継続的インテグレーション)ツールを自身のプロジェクトに導入し、個人的にアジャイル開発に興味を持ったことだそうです。

何人かの若手が同時多発的に、夕方に読書会や勉強会を自主開催するようになり、やがて全社で認められるようになりました。

たまたまヴァル研究所がそうした取組みに理解があったというわけではありません。ヴァル研究所は、まだインターネットが普及する前に、電車の乗り換え案内ソフト「駅すぱあと」をリリースし、古くからのパソコンユーザーには馴染みのある企業で、新井さんいわく「昭和なスタイルの会社」だそうです。社内には、最初の「駅すぱあと」を開発した60代のベテランエンジニアを筆頭に、50代のエンジニアも数多く在籍しており、当初、なかなか全社に行きわたらせることができませんでした。

しかし、社内の2~3チームでアジャイル開発が導入されていくと、周囲にもアジャイルに興味を持つ人が増えてきます。新しいもの好きは、どこにでも少なからず存在していて、そうした人たちを軸に、次第に広がりを見せていき、やがて多くの社員たちもカイゼンやアジャイルの取り組みに参加するようになりました。

現在は、社内のいたるところに無数の付箋紙が張られたホワイトボードが置かれるようになったとのこと。しかも、開発部門だけでなく、総務部や監査チームでのカイゼンや、販売促進チームでの残業管理などにも同じ手法で取り組んでいるそうです。

f:id:itstaffing:20190207102510j:plain
▲社内のいたるところに付箋紙の張られたホワイトボードがあるヴァル研究所の社内

ソフトウェア開発の新しい試みにモブプログラミングというものがあります。これは、複数名がキーボード1個で開発していく手法のこと。たとえば総務部門では、採用のスカウトメールの執筆に、複数名が1台の端末を囲んで1通のメールを仕上げていくモブプログラミングならぬモブワークを実践しているそうです。

f:id:itstaffing:20190207102515j:plain
▲開発部門だけでなく、総務部や販売促進チームでもモブワークを行っている

最後に新井さんからのアドバイスがありました。

職場でこうしたカイゼン手法を導入しようとすると、全員が賛同することはまずありません。知的好奇心旺盛なエンジニアや、何かを変えることに対して前向きで気が利くメンバーにフォーカスを当てて、巻き込んでいくのが成功への秘訣だそうです。そして、始めるのに遅すぎることはなく、行動するべきだと思ったときにスタートするべきだと締めくくってくれました。

今回のイベントでは、アジャイル開発やカイゼンの手法だけでなく、新井さんの所属するヴァル研究所の取り組みにも驚かされました。「ぼっち」から始めてここまで全社に行きわたらせたことに感動するとともに、まずはスモールスタートでもいいから行動することの大切さを教えていただきました。派遣スタッフから、就業先の雰囲気までいきなり変えるのは難しいかもしれませんが、朝会など、できることはたくさんあるでしょう。小さく、始めてみませんか?

増井敏克の「情報のキャッチアップが足りない」ときに読むコラム 第3回 AIでできること、できないこと

f:id:itstaffing:20190123133701j:plain

「人間の仕事がAIに取って代わられる」など、なにかと耳にするAIについて。きちんと理解していないと、日々更新されるAI関連のニュース記事を読むと不安が募る…なんて方もいらっしゃるかもしれません。AIへの理解を深めるとともに、AIにできること、できないことを知ることで未来への考え方も変わりそうです。今回のコラムで、一度キャッチアップしてみませんか。

【講師】増井 敏克さん
【講師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』『プログラマのためのディープラーニングのしくみがわかる数学入門』(以上、ソシム)がある。

作りたい「人工知能」のイメージを考える

中小企業の社長さんとお話ししていると、人工知能がブームであるという話から、「ドラえもん」みたいなことができるようにならないの?という声を聞きます。ただ、このような話を聞いたときに私が思うのは、コンピュータがどのような動作をすれば「賢い」と感じるのか、という点です。

「人工知能」という言葉から想像するのは、私たちが使っているコンピュータよりも「賢い」動作をしている姿です。ただ、「ドラえもん」は便利な道具は使っていますが、「賢い」とは言えないのではないかと思っています。自分で考えて行動する、「鉄腕アトム」のような存在が理想ではないでしょうか?

例えば、エアコンの制御を考えたとき、現在のエアコンはリモコンなどを使って冷房や暖房、温度設定を行うと思います。このように人間が操作をしている状況は、あまり賢いとは言えません(もちろん、指定した温度に調整する、という機能は素晴らしいと思いますが)。

では、「賢い」エアコンとは何かを考えてみます。例えば、部屋にセンサーを設置し、室温が15度以下になると自動的にエアコンのスイッチが入るようにしてみましょう。人間がエアコンを操作しなくても、センサーによって自動的に動作します。この方法は現在より賢くなったように思いますが、スイッチを入れる温度は人間が設定する必要があります。

f:id:itstaffing:20190123133704j:plain

人によって快適な温度は異なるため、「温度設定」は必要なように思うかもしれませんが、これもなくすことを考えてみましょう。設定しなくて済むように、人間の操作を記録して再現する方法があります。

例えば、住人が10日間操作したことを記録し、そこから規則性を学習して使うことを考えます。最初は人間の操作が必要ですが、温度を設定している、ということを意識することなく、自動的に温度設定が可能になります。こうなると、こどもが学習して成長するように、エアコンが賢くなったと感じるのではないでしょうか?

f:id:itstaffing:20190123133707j:plain

機械学習とディープラーニングの概要

現在の人工知能の研究で使われている「機械学習」は上記のような考え方に基づいています。つまり、人間が決めたルールや人間が作ったプログラムに沿って動くのではなく、人間が作った学習プログラムと予測プログラムに対し、データを与えるとルールを自動的に生成し、そのルールに沿って予測プログラムが処理する、といった動作をします。

f:id:itstaffing:20190123133710j:plain

そして、これを実現するために使われているのが「ニューラルネットワーク」です。ニューラルネットワークは機械学習を実現する技術の一つで、それを発展させたものが最近話題の「ディープラーニング」です。

ニューラルネットワークは人間の脳を模倣した構造で、入力層に対して入力データを与え、出力層から出力されたデータと教師データを比較して重みを更新する、という仕組みになっています。

f:id:itstaffing:20190123133713j:plain

もっとシンプルに、「入力から出力を得る関数」をイメージすると、これまでは「入力」と「関数」を人間が与えると、コンピュータが出力を生成しました。しかし、機械学習では「入力」と「出力」を与えたときに「関数」をコンピュータが考える、と言うことができます。

f:id:itstaffing:20190123133716j:plain

ニューラルネットワークの階層を何段にも多層化したものが「ディープラーニング(深層学習)」です。これまでもニューラルネットワークを多層化する、という方法は考えられていましたが、コンピュータの高性能化やデータの増加などがあり、現実的な時間で高い精度が得られるようになったという背景があります。

また、これまでの人工知能の研究といえば、大学などを中心に行われていたのに対し、最近のディープラーニングの研究は企業などを中心に行われていることも特徴の一つです。そして、どんどん私たちの身近なところにAIが導入されてきています。

AIによってなくなる仕事

囲碁や将棋などにおいて、コンピュータが人間を超えた、というニュースは話題性もあり、多く報じられています。ただ、人間を超えるコンピュータが登場しても、棋士という仕事がなくなることはなさそうです。

一方で、AIが登場するまでもなく、なくなっていった仕事はたくさんあります。例えば、駅で切符を「切る」仕事は自動改札で大幅に減り、Suicaなどの電子マネーによって「切符」という姿も失われつつあります。また、高速道路の料金所などはETCカードの登場により、エレベーターガールや受付などは自動音声やタッチパネルなどにより不要になりつつあります。

その他にも「マニュアルに沿って行う仕事」があります。マニュアルが作れる、ということはそれをプログラムで実装すれば実現できます。現在実現されていないのは、現実的に高価なハードウェアが必要である、故障時の対応が必要である、といった理由があり、コスト面で見合わないと考えられます。このように、現在は実現するためのハードルが高いような仕事も、AIとは関係ないかもしれませんが、今後はなくなっていくかもしれません。

むしろAIによって置き換えられるものとして、専門的な知識が必要な場合でマニュアル化できないように思えても、「誰に頼んでも結果が同じ」ものが考えられます。通訳や翻訳、税理士の書類作成業務や弁護士の判例調査、医師の診断などといったものは専門的な知識が必要ですが、基本的には求める結果が変わらないものです。

つまり、こういった仕事を行なっている専門家は業務の一部が不要となり、オリジナリティのあるコンサルティングなどが求められると言えそうです。

AIが進化してもなくならない仕事

逆になくなりそうにないものとして、「新しいものを考える仕事」があります。「教師データ」をもとに行われる機械学習を考えると、データがない=前例がないものは現在の方法では実現が難しいと言えます。似たものは作ることができたとしても、それでは意味がありません。

また、「人」であることが大切な仕事もなくなりそうにありません。囲碁や将棋だけでなく、スポーツ選手やアイドル、ミュージシャンなどは「人」を見ることが目的です。毎回同じ結果が得られない、結果がどうなるかわからないものにはワクワク感があります。このように「人」や「人の行動」が求められる仕事、共感が得られるような仕事も「人」ならではだと思います。スポーツのインストラクターなどの「教える仕事」も、「人」だからこそ意味がありそうです。

ただし、現在は心理的なハードルによって「人」でないと嫌だと思っている仕事でも、今の若い人が歳を重ねて世代が変わると一気に進む可能性があると感じています。例えば、身体に触れられるのは嫌だと感じる人が多いため、美容師や理容師といった仕事は、特に女性では抵抗があるかもしれません。しかし、マッサージ機などは機械でも十分だと感じる人は少なくないことを考えると、今後はどうなるかわからないとも言えそうです。

同様に、保育や介護の現場では、人に手伝って欲しいと思う一方で、若い世代であれば機械でも違和感がない、という可能性も。

このように、未来のことはどうなるかわからない一方で、今後は「他の人がやると違う結果になる仕事」こそ、これまで以上に求められる時代が来るのではないか、と感じています。エンジニアとして働く皆さんの活躍の幅は、ますます広がりそうです。AIに関してだけでなく、旬な話題を「なんとなく知っている」から、もう一歩理解を深めたいと思ったときに、本コラムを今後もご活用ください。

【イベントレポート】数理最適化を理解して、機械学習の中身を知ろう

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年12月5日のイベントでは「機械学習の中身を理解する」と題して、書籍『機械学習のエッセンス』の著者である加藤公一さんを講師にお迎えし、機械学習アルゴリズムの仕組みを理解するために必要な知識について解説していただきました。機械学習の仕組みを理解する上で、どんな知識が必要か、読み進めるうちにわかってくるでしょう。

■今回のイベントのポイント
・数学はデータサイエンティストの必須知識?
・機械学習に必要な数学
・数理最適化の基本
・機械学習のアルゴリズム

【講師プロフィール】
加藤 公一さん
シルバーエッグ・テクノロジー株式会社チーフサイエンティスト。レコメンデーション(自動推薦)システムに関する研究開発に従事。特に機械学習アルゴリズムの設計・実装を得意としている。博士(情報理工学)。著書に『機械学習のエッセンス』(ソフトバンククリエイティブ)など。

数学はデータサイエンティストの必須知識?

冒頭で、加藤さんは書籍『機械学習のエッセンス』の執筆裏話や、込められた思いなどを話してくれました。

機械学習を根本から理解するには、数学の知識が求められます。しかし最近は、機械学習をプログラムに取り入れる場合でも、手軽に利用できるライブラリが用意されているため、イチから自分で作らないことがほとんど。加藤さんの書籍は、そうしたライブラリに頼ることなく、きちんと中身を理解した上で、それを実装して中身を理解していこうという試みだそうです。

近年では「大人の数学勉強やり直しブーム」などもあり、同書も、数理最適化から機械学習へのアプローチを解説した内容になっています。ただ、「データサイエンティストは数学の必須知識か?」という問いに対して加藤さんは「多分NO!」であると答えます。

「データサイエンティストは全員、数学ができるかというと、そうでもありません。しかし、数学ができることは他のデータサイエンティストとの差別化につながります」というのが加藤さんの考え。複数の選択肢の中で「面白いと思うこと」を優先してやるのはよいキャリアアップ戦略になるとのことです。

機械学習に必要な数学

今回紹介する「数理最適化」とは、与えられた制約の中で、関数を最小化(または最大化)すること。機械学習のアルゴリズムは、数理最適化に帰着することが多いということで、数理最適化について知っておくと、根本理解が進みます。

そして数理最適化を理解するには、「線形代数」と「微積分」という高等数学の知識が必要になります。これらは高校で習う数IIBや数IIIC、あるいは大学の授業で学ぶ数学の領域です。「よし、機械学習を勉強するぞ!」と思い立ったものの、数式を見て撃沈する人も多いのが現状です。

実際に今回も、高度な数式が多数登場しました。すべてを理解することは難しくても「身近なライブラリの中身が、そうした考え方で作られている」ということが分かれば、機械学習への向き合い方も変わってきそうです。

数理最適化の基本

まずは行列とベクトルから。今回はSVM(サポートベクタマシン)で使われる「距離の公式」に絞って紹介してくれました。サポートベクタマシンとは、機械学習における「教師あり学習」を用いるパターン認識モデルのことです。

距離の公式を知る前に、まずはベクトルの内積について解説してくれました。

f:id:itstaffing:20190116144730j:plain
▲ベクトルの内積について。ベクトルaとベクトルbの内積が0になるときベクトルaとベクトルbは垂直の関係にある

これを平面に展開すると次のように考えられます。

f:id:itstaffing:20190116144733j:plain
▲平面の方程式。法線ベクトルとの内積がゼロの場合、xは平面上にある

これらを踏まえた距離の公式が次のようなものだそうです。

f:id:itstaffing:20190116144737j:plain
▲距離は、どれだけ離れているかを表すため、絶対値やノルムで表す

距離の公式を理解するためにベクトルや行列の知識が必要だったように、「勾配降下法」そして「ラグランジュ未定乗数法」を理解するために、微分や偏微分の知識が必要となります。イベントでは微分や偏微分についても、基礎を解説してくれたのですが、ここでは割愛します。

f:id:itstaffing:20190116144740j:plain
▲勾配は∇fは、n個の変数で偏微分し並べたものであり、幾何学的にはこのような性質を持つ

勾配降下法では、-∇fの方向に少し進むと関数の値が小さくなるだろうという考え方で、ひたすら勾配方向に進むことを繰り返して極値を求めていきます。

f:id:itstaffing:20190116144743j:plain
▲たとえば、図中の等高線のうち一つの輪がf=10のときの点の集まり、その内側がf=9のときの点の集まりとすれば、勾配降下法により関数の値を最小化させていくことで谷底(極値)にたどりつく(かもしれない)

ディープラーニングは、まさに勾配降下法のようなイメージで、たとえば犬と猫を判別するのであれば、繰り返しの学習により、判別誤差を小さくすることで、精度を上げていくのだそうです。

もう一つ、ラグランジュ未定乗数法は、いくつかの変数に対して、いくつかの関数の値を固定するという束縛条件のもとで、別のある1つの関数の極値を求めるための方法です。

f:id:itstaffing:20190116144746j:plain
▲KKT条件(カルーシュ・クーン・タッカー条件)を用いた解法では、不等式制約も扱える

具体的な解を導く手順は次のようになります。

f:id:itstaffing:20190116144749j:plain
▲ラグランジュ未定乗数法で不等式成約を扱う際の考え方

そして、いよいよサポートベクタマシン(SVM)の数学的な解説へ進みます。

f:id:itstaffing:20190116144753j:plain
▲サンプルは単純に直線で分けられるものとして、与えられた2種類の点列(赤と青)を分類したいというケースについて考える

入力データが予想と合っていれば1(正)、間違っていれば-1(負)のラベルを付与し、分類するための直線から点の距離が一番大きくなるように、先ほどの距離の公式を用いると、次のような式が成り立ちます。

f:id:itstaffing:20190116144756j:plain
▲ωは何倍しても正解になるので最終的な式をシンプルにすることができる

これをラグランジュ未定乗数法のラグランジュ関数に当てはめると次のようになります。

f:id:itstaffing:20190116144801j:plain
▲ラグランジュ関数に当てはめた結果の式はこうなる

そして、∇L=0を計算した結果を元の式に当てはめると、次のような式になり、これを解いていきます。

f:id:itstaffing:20190116144806j:plain
▲最終的な式。プログラムへの具体的な実装は書籍を参照して欲しいとのこと

アルゴリズムとしては、目的関数の改善に寄与する「よい」i,jを選択しながら、a_i,a_jを更新していきます。

最後に、加藤さんから
「線形代数はちゃんとした教科書で学んだほうがよい」
「教科書を通読する必要はなく、必要に応じて読み直すのがよい」
「コンピュータを使わずに計算するのも訓練として必要」
といくつかアドバイスがありました。

今回のイベントは、これまでと違い、数式が次々と登場するもので、まるで大学の講義のような雰囲気でした。勾配降下法やラグランジュ未定乗数法など、統計学や流体力学などを専門に学んだ人にしか馴染みのなさそうな知識も登場し、限られた時間の中では、すべて理解するのは難しいです。しかし、機械学習が内部でどのようなことをしているのか、その一端に触れられたことで、興味が湧いたり、改めて数学の学習意欲が出たという参加者が多かったです。レポートを読まれている皆さんも、ぜひこれを皮切りに、機械学習の仕組みへの理解を深めてみてはいかがでしょうか。