Tech & Works関係のブログ

Tech & Works関係のブログです。

AIを人事で応用する場合のリスクについて

(独)経済産業研究所のサイトの記事「AIと働き方 「人事」でデータ活用力磨け」を読みながらの感想です。


誰のための記事?

 経営者、人事担当者、HR系ディベロッパ

 

ざっくりと内容は?

 AIの人事面での応用領域は3つある。1「採用における書類選考や人事などの社内サービスへの問い合わせをAIに担わせる業務の効率化」、2「最適な人材配置を提案するなどのマッチングの効率化」、3「本人の希望やキャリアパスに応じた研修の提案などの人的資本投資の効率の改善を狙った能力開発のカスタマイゼーション」

 このような技術の供給がある一方で、2つの構造変化要因によって、これを利用する側のリスクが高まっているので注意が必要とのこと。 

2つの構造変化要因とは?どのようなリスク?

【構造変化要因】

  1. 少子化による採用側の人材獲得難の深刻化

人材の獲得に際して2つの間違いが起きうる。①「会社に貢献しない者を採用してしまう」、②「会社に貢献するであろう者を採用しない」。日本企業では従来①の間違いの最小化を目指してきたが、少子化による採用難の中②の間違いのコストが上昇している。

  1. 人事の分権化

集権化した人事部では迅速な資源配分が困難。加えて社員のキャリアパスやニーズが多様化し、現場抜きでの人事施策が困難。このように現場の管理職に求められるスキル水準は上がるが、保有するスキルとの間にギャップが生じている。ゆえに、管理職が担うべき育成・配置業務の支援ツールが多数考案されている。

 ツールを使う側に、統計的な素養とデータ分析の経験が求められる。AIは隠れた相関関係を拾うことはできても、因果関係やメカニズムは人間が判断する必要があるし、データに計測誤差や統計的バイアスの可能性があるかを理解する必要がある。

 次に、機械学習を使ったツールには教師サンプルが必要となるが、教師サンプルが間違っているとツールも同じ誤りをする。したがって、教師サンプルの評価が必要。

【リスク】

近視眼的なデータ活用は、従業員や応募者の差別につながりかねないという点である。多くの適性検査がストレス耐性などメンタルヘルスのリスクを計測する質問項目を入れている。AIによる人材配置の提案にしても、過去の業務履歴が将来の職種適性を規定するとすれば、最初の差別が長期的なキャリア形成に大きな影響を与えかねない。

感想

①「会社に貢献しない者を採用してしまう」、②「会社に貢献するであろう者を採用しない」。これらを避けることがきちんとワークし始めると、結局、労働市場に残るのはふるいから落ちた人が大半になることになるという、社会的なリスクもありそうだ。

第4回 PythonAnywhereでWebサイトを作ろう・・・チュートリアル編 Step2(2)

 では、コードの主要部分の解説をしていきます。
 最初は flask_app.pyのコードです。

from flask import Flask, redirect, render_template, request, url_for

app = Flask(__name__)
app.config["DEBUG"] = True

comments = []

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "GET":
        return render_template("main_page.html", comments=comments)

    comments.append(request.form["contents"])
    return redirect(url_for('index'))



 テキストボックスに入力されたコメントを格納するリスト型の変数「comments」を定義します。

comments = []



 ユーザがこのサイトのトップページを開いたときに、GETメソッドであればmain_page.htmlを表示します。
 POSTメソッドであった場合は、テキストボックスに入力された値を、変数「comments」に格納します。そして、@app.routeで追加したルートはurl_for関数でURLを取得することができるので、引数としてindexを渡すことでトップページをGETメソッドで呼び出します。

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "GET":
        return render_template("main_page.html", comments=comments)

    comments.append(request.form["contents"])
    return redirect(url_for('index'))



 次に、main_page.htmlのコードです。ボタンが押されたときのアクションとしてPOSTメソッドをしています。
 < textarea >タグでテキストエリアのname属性を「contents」としています。このテキストエリアに入力された内容が先程のflask_app.pyのコードのcomments.append(request.form["contents"])に渡されます。

            <div class="row">
                <form action="." method="POST">
                    <textarea class="form-control" name="contents" placeholder="Enter a comment"></textarea>
                    <input type="submit" class="btn btn-success" value="Post comment">
                </form>
            </div>


 最後に、入力されたコメントを表示させる部分のコードです。入力されたコメントは繰り返し表示する必要があります。FLASKでは、{%..%}の中にforとendforと書くことでForループにすることができます。また、{{..}}内で指定した変数の値を表示させることができます。

        <div class="container">

            {% for comment in comments %}
                <div class="row">
                    {{ comment }}
                </div>
            {% endfor %}

HRテクノロジーについて

リクルートワークスのサイトの記事を読みながらの感想です。

誰のための記事?

 経営者、人事担当者、HR系ディベロッパ

 

ざっくりと内容は?

 Johnson & Johnsonは毎年2万人以上の職員を採用しており、そのための求人情報を採用ページに載せているが、Googleでキーワード検索すると、キーワードと関係ない求人が大量に引っかかってしまい困っていたとのこと。そこで、セマンティック検索技術を取り入れたGoogle Cloud Job Discoveryを使うことで検索の精度が向上し、採用候補者の満足度も向上したとのこと。

 

キーワード

HRテクノロジーカンファレンス、Unleash、HR Technology Conference & Expo、Google Cloud Job Discovery、セマンティック検索技術

 

感想

HRテック系のカンファレンスもあるなんて初めて知った。

Google Cloud Job Discoveryで検索すると、Cloud Talent SolutionのJob search機能が表示される。Job searchのデモも見られる。通常の検索窓に、この機能を入れればいい気もするが、ここで商売するのかな。

第3回 PythonAnywhereでWebサイトを作ろう・・・チュートリアル編 Step2(1)

では、続いてStep2に進みます。今回は、コメントを入力するための画面を作成し、その画面のテキストボックスに入力した、コメントが画面に表示されるようにしていきます。

Step 2  コメントをリストを使って保存するだけのサイトを作る。
 まずは、コメントを入力するためのHTMLファイルを作成します。

  • ダッシュボードの「Files」から、リンクをたどって、ディレクトリ「mysit」に入ります。
  • 画面左のテキストボックスに「templates」と入力し、テキストボックス右の「New directory」ボタンを押して、新規のディレクトリを作成します。
  • 作成された「templates」のリンクをクリックして「templates」配下に移動します。

f:id:a229315:20181201173928p:plain

  • 画面右のテクストボックスに「main_page.html」というファイル名を入力し、右の「New file」というボタンをクリックすると、以下のようなテキストエディタが表示されます。

f:id:a229315:20181201221418p:plain

  • そのエディタに以下のHTMLコードを貼り付けます。
  • エディタ上部の緑の「Save」ボタンを押します。
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" integrity="sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" crossorigin="anonymous">

        <title>My scratchboard page</title>
    </head>

    <body>
        <nav class="navbar navbar-inverse">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="#">My scratchpad</a>
            </div>
          </div>
        </nav>

        <div class="container">

            {% for comment in comments %}
                <div class="row">
                    {{ comment }}
                </div>
            {% endfor %}

            <div class="row">
                <form action="." method="POST">
                    <textarea class="form-control" name="contents" placeholder="Enter a comment"></textarea>
                    <input type="submit" class="btn btn-success" value="Post comment">
                </form>
            </div>

        </div>

    </body>
</html>


  • 次にディレクトリ「mysite」に戻って「flask_app.py」ファイルを開きます。
  • 以下のコードを入力して、エディタ上部の緑の「Save」ボタンを押して、セーブできたら右側の青のリロードボタンを押します。


from flask import Flask, redirect, render_template, request, url_for

app = Flask(__name__)
app.config["DEBUG"] = True

comments = []

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "GET":
        return render_template("main_page.html", comments=comments)

    comments.append(request.form["contents"])
    return redirect(url_for('index'))


  • ダッシュボードの「Web」を開き「Configurartion for」の下に「Sesshu.pythonanywhere.com」というリンクをクリックして以下のような画面が表示されたら成功です。

 何かテキストにコメントを書いて、緑の「Post comment」ボタンを押しましょう。
 入力したテキストが、テキストボックの上部に表示されると思います。
f:id:a229315:20181201223056p:plain

 このままにしておくと、いろいろいたずらされる可能性があるので、このサイトをパスワードで保護しましょう。

  • ダッシュボードの「Web」を開き、したの方までスクロールします。赤字で「Delete」ボタンがある上辺りに、パスワードを入力する欄がありますので、PasswordをEnabledにして、ユーザネームとパスワードを入力して青のチェックブタンを押すと設定されます。
  • 画面上部にスクロールしてトップ付近に緑色のリロードボタンがあるのでそれを押します。

その後、作ったサイトをリロードするとユーザ名とパスワード入力を求められるので、先程設定したものを入力しましょう。
以上がStep2です。お疲れ様でした。ただ、コードの解説を何も書いていないので、Step3に進む前に、次回コードの主要部分の解説をしていきます。
 

第2回 PythonAnywhereでWebサイトを作ろう・・・チュートリアル編 Step1

  今回は、PythonAnywhereのチュートリアルを使って簡単なコメントを書けるサイトを作ってみます。

 ログイン後の画面の右上のHelpのリンクをクリックして、ヘルプページを表示するといろいとチュートリアルとかがあるので、参考になります。

 ここでは、FlaskというWebフレームワークを使ってサイトを作っていきます。ヘルプの真ん中あたりの「Flask」というカテゴリのトップに、「A beginner's guide to building a simple database-backed Flask website on PythonAnywhere」というリンクがありますのでクリックします。

 

 開くと、以下のような英語で書かれたチュートリアルが表示されますので、説明に従って入力していきましょう。

 

【今回作るもの】

 チュートリアルの中に画像がありますが、これが今回作るものです。テキストボックスがあると思いますが、そこにテキストを入力して緑色のボタンをクリックすると、テキストボックスの上に(画面では3行)、テキストボックスの内容が表示されるような簡単なコメント管理サイトです。

f:id:a229315:20181125145458p:plain

 とはいっても英語なんか読めないよという人のために、要点だけまとめて日本語にしておきます。

 チュートリアルでは、GITを使ったバージョンコントロールの説明もありますが、そこらへんはすっ飛ばしてます。

 英語の勉強がてら順番にやっていくと、Pythonと英語の両方が一緒に勉強できるので、時間のある方は英語のチュートリアルをやってみてください。

 

 要点は3つのステップで構成しました。

  • Step 1  Hello World!的なものを作る。
  • Step 2  コメントをリストを使って保存するだけのサイトを作る。
  • Step 3  MySQLを使ってコメントを管理できるサイトを作る。

 今回はStep1になります。Step2は、Pythonのデータ構造のリスト型の変数にコメントを保存するだけなので、リロードするとコメントが消えてしまいます。Step 3ではDBMSMySQLを使ってコメントをきちんと保存できるようにします。

 では、順番に説明してきます。

 

Step 1  Hello World!的なものを作る。

  1. ダッシュボード画面の右上のメニュー「Web」というリンクをクリックします。

ダッシュボード】

f:id:a229315:20181125160839p:plain 

  1. 「Add a new web app」をクリックすると右側に以下のように「Your web app's domain name」と出てくるので、ここは気にしないで「Next」をクリック。

f:id:a229315:20181125161934p:plain

  1. 画像は省略しますが、「Select a Python Web framework」と出てくるので「>>Flask」をクリック。続いて「» Python 3.6 (Flask 1.0.2)」をクリック。
  2. 次の「Quickstart new Flask project」という画面でファイルの保存先のパスが表示されているので、ここはそのままにして「Next」をクリック。
  3. すると、以下のようなコンフィグ画面が表示されます。「Configurartion for」の下に「Sesshu.pythonanywhere.com」というリンクが表示されているので、それをクリックするとその下のように、「Hello from flask!」という画面が表示されます。

【Web】

f:id:a229315:20181125163733p:plain

 f:id:a229315:20181125170445p:plain

 

 ここまでで、自動的にFlaskというWebフレームワークを使って、必要最低限の要素が作られました。2つ上の【Web】という画面に戻ってください。下にスクロールすると真ん中あたりに下図のような「Code」という欄があります。そこのSource Codeというところの右側の「Go to directory」というリンクをクリックしてください。

f:id:a229315:20181125170910p:plain

 下図のような「Files」という画面が開きます。真ん中あたりに「Flask_app.py」と書かれているリンクをクリックしてください。

f:id:a229315:20181125171151p:plain

 すると以下のようにFlask_app.pyファイルの中身が表示されます。10行目に「Hello from Flask!」と書かれていますが、これが先程の「Sesshu.pythonanywhere.com」というリンク先に表示されていた文字列です。

 この文字列を適当に書き換えて見ます。例えば「Hello from 吉田雪舟」と書き換えてみましょう。

f:id:a229315:20181125171318p:plain

 緑色の「Save」ボタンとリロードf:id:a229315:20181125171927p:plainボタンをクリックしてから、先程の「Sesshu.pythonanywhere.com」をリロードしてみると、変更した文字列に変わっていると思います。

f:id:a229315:20181125171755p:plain

  以上がStep1です。お疲れ様でした。

 

第1回 PythonAnywhereでWebサイトを作ろう(登録編)

 PythonAnywhereというサイトでは、Pythonが使えるクラウド環境を無料で使うことができます。
 サイトが大きくなったら有料プランにも移行することができます。

f:id:a229315:20181125114010p:plain

【登録方法】

  1. トップページ上部の「Start running Python online in less than a minute!」ボタン をクリック
  2. Plans and pricingページ上部の「Create a Beginner account」ボタンをクリック
  3. Create your accountページに、ユーザネーム、ご自身のメールアドレス、ログインパスワードを入力して「Register」ボタンをクリック
  4. 画面の説明のチュートリアルが始まるので、そのまま見るか「End Tour」を押して終了
  5. 登録したメールに確認メールが届くので、「click this link」というリンクをクリック

登録が完了すると以下のようなダッシュボード画面に入ることができます。
次回はこのサイトのチュートリアルから、簡単な掲示板アプリを作ってみましょう。

f:id:a229315:20181125114011p:plain