HackerRankのアルゴリズム厳選20問でコーディング面接を対策する【Pythonコード付き】

HackerRankのCracking the Coding Interview

https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interviewwww.hackerrank.com

HackerRankという、世界中のハッカー(=ソフトウェアエンジニア・機械学習エンジニアなど)が、プログラミング課題を解決するサイトがあります。

そこに「Cracking the Coding Interview」といういかにもコーディング面接対策といった風情のチュートリアルがあるのですが、初心者がプログラミングのためのアルゴリズムを学ぶのに素晴らしい教材だと感じたので紹介します💁‍♂️

Cracking the Coding Interviewの良さみ

課題の質が高い

まず、かの「Cracking the Coding Interview」(日本では「世界で闘うプログラミング力を鍛える本」)の著者であるGayle Laakmann McDowellが監修しており、課題の質が非常に高いです。難易度設定が適切で、初心者でも考えやすい適度な難易度になっています。

類書などのように「1章からいきなりむずすぎワロタ・・・」となりません🐜たとえば、以下の問題を見てみてください。

入力が1, 1, 3なら出力は3

入力が0, 0, 1, 2, 1なら出力2

など、入力の中で「1つしかない数字」を見つけて出力せよ

ただし「1つしかない数字」以外はすべて2回ずつ表れる

(Bit Manipulation: Lonely Integer)

(※問題文修正 2018/08/02)

この問題は、問題タイトルにもある通り本来はビット演算を使って解くことが想定されているのですが、ハッシュなどを駆使すれば何とか解答することができそうですよね🤔

このように、想定解となるアルゴリズムを知らなくても取り掛かりやすい程度のレベルに調整されています。

Cracking the Coding Interview: 189 Programming Questions and Solutions

Cracking the Coding Interview: 189 Programming Questions and Solutions

解説の質が高い

さらに、解答は動画付きで丁寧に解説されていて、コードとにらめっこしていてもわからないようなアルゴリズムのかんどころを視覚的に説明してくれています。

アルゴリズムは、言葉で聞くと難しく感じてもビジュアルで理解するとすんなりわかることも多いため、動画が付いてくるのは非常にありがたいです。

以下は上記の問題の解説動画です。ご覧頂ければどれだけ詳しく解説してくれるかわかるかもしれません。

ちなみに、ハッシュを使った解答もビット演算を使った解答も解説してくれていて、「なるほど、そう解けば良かったのか💡」と理解が丁寧に促されます。

www.youtube.com

問題が厳選されている

問題が20問に厳選されていて、短期集中的に取り組みやすいです。私は週末で一気に終わらせました。

書店で分厚いアルゴリズム本を買ってきて「アルゴリズムおおすぎワロタ・・・」となった経験がある方には特におすすめです😇

具体的には、以下の全20題に厳選されています。

  • データ構造

    • 配列:左回転をする
    • 文字列:アナグラムをつくる
    • ハッシュ:身代金要求
    • 連結リスト:循環を見つける
    • スタック:括弧のバランスをとる
    • キュー:ふたつのスタックの物語
    • 木構造:二分探索木
    • ヒープ:逐次的に中央値を求める
    • トライ木:連絡先
  • アルゴリズム

  • テクニックおよび概念

単純に解いていて楽しい問題も多いためモチベーション維持にもGoodでした。

議論が闊達に行われている

問題ごとに設定されているディスカッションタブというのを開くと、各言語での実装例や、他の人の解法・考え方を学ぶことができます。

他サイトと比べてもわりと議論がアクティブなため、どうしてもわからないことがある場合があっても質問すれば回答が返ってくることが多いです。私は質問を投稿して半日以内に返信が来ました🙏

おわりに+Python3での実装例

アルゴリズムはプログラミングに登場するさまざまな概念の基礎になっていることが多いので、このような教材で集中的に学んでおくのがよいと感じます。

私はデータアナリストでふだんPythonを使って分析を行うことが多いため、Python3で挑戦してみました。GitHubにあげておいたので、Pythonでトライしてみようという方は参考にしてみてください|д゚)

github.com

テレビCMの残存効果をAd Stock(アドストック)で計算してみる【R & Pythonコード付き】

f:id:ekanoh:20180712214522p:plain

テレビCMの効果測定

昨今の広告市場を席捲しているデジタル広告市場においては、「効果測定」をしろと言われたば、 CVR(コンバージョン率)やCPA(獲得単価)など、極めて精緻で細やかな指標を用いてレポートすることができる。 そのため、広告をどれだけ出稿するかの意思決定を正確なデータに基づいて行え、大変使い勝手がよい。

しかしながら、このようにデータが整備されているデジタル広告と異なり、 新聞、雑誌、ラジオ、テレビなど古来からのメディアの効果測定はデータ分析にひと工夫が必要だ。

今回は、最もポピュラーに使われている「テレビCM」の効果測定を例にして考えてみよう。

例:テレビCMの効果測定

たとえば、以下のように「テレビCMとその視聴率」と「売上」の時系列データがあったとして、 「効果測定」をしたい状況を考えよう。(※架空のデータ)

日付(週) 視聴率 売上
2018年6月11日 0% 30万
2018年6月18日 10% 80万
2018年6月25日 15% 60万
2018年7月2日 8% 120万
2018年7月9日 10% 140万

どのように分析すればいいだろうか?

まず考えたいのは、 「視聴率が高い日に売上もあがっているのではないか」ということだ。

――しかしながら、よく見てみると視聴率が最も高い15%の日に、売上が2番目に低い60万となっているため、 この仮説の蓋然性は低いと考えられる。

グラフにしても以下の通りである。 「視聴率が高い日に売上もあがっている」と読み取るのは難しいだろう。

f:id:ekanoh:20180712204748p:plain

このようなデータは頻繁に出くわすのだが、 実はひとつの理由にテレビCMの効果には時間差があることがある。

たしかに、ゲームアプリのCMを見て、すぐにウェブ検索をしてアプリをダウンロードすることもあるだろうが、 化粧品のCMを見て、翌日または数日後にドラッグストアで買って帰る場合や、 高級な家電製品のCMを見て、ボーナスが出た翌月に店頭で購入する場合など、 効果のあらわれ方には時間差があることは想像に難くないだろう。

どうやって正しく効果測定するか?

広告の残存効果(アドストック)

このような効果の測定には広告の残存効果をモデル化したアドストックという指標を導入する。 英語ではAd Stock、Carry Over Effect、あるいはDecay Effectなどという表現をされることもある。

f:id:ekanoh:20180712205311p:plain

上図のように、広告を打った初週だけでなく、 翌週、翌々週以降も効果が残存しているという設定でモデルを定式化する。

定式化

Def: Simon Broadbent's Adstock Advertising adstock - Wikipedia

時点tでの残存効果(アドストック)A_tを以下のように定義する。

{ \displaystyle
A_t = T_t + \lambda A_{t-1}
}

ただし、

  • A_t: 時点tでのAdStock
  • T_t: 時点tでの広告指標(たとえば視聴率)
  • \lambda: 忘却率(減衰率・残存率)※
    • どれくらいの割合で減衰していくかを表す定数
    • 0から1の間の数値を取る

エビングハウスの忘却曲線のように、「消費者の脳内に広告の効果が留まっている」という考え方をして、「忘却率」と呼ぶ場合がある。

具体例でみる

「むむむ数式だけだとイメージが湧かないゾイ」という方には、 実際にアドストックを計算した例を用意したのでご覧いただきたい。数値は上記の例をそのまま使っている。

忘却率を仮に0.80と仮定すると、以下のようになる。

日付(週) 視聴率 アドストック 売上
2018年6月11日 0% 0% 30万
2018年6月18日 10% 10% 80万
2018年6月25日 15% 23% 60万
2018年7月2日 8% 26% 120万
2018年7月9日 10% 31% 140万

Excelで計算した場合の数式は、以下の通りである。 ぜひ、上記のモデルの数式と見比べながら確認してみて欲しい。

f:id:ekanoh:20180711121817p:plain

グラフにしてみると、ただの視聴率(GRP)を使っていたときと比べて、 広告の効果がはっきりとわかる形になっていることがわかるだろう。

f:id:ekanoh:20180712205534p:plain

忘却率をどうやって決めるか

さきほどは忘却率を0.80と仮に決めていたが、実際の現場ではどのように決めるのが妥当だろうか。 以下にふたつの方法を提案する。

1. 忘却率ごとに相関を出して最適化する(定量的)

ひとつは、広告効果を最も適切に説明するようなパラメータを機械的に選びとる方法である。

忘却率が0.01のとき、0.02のとき、・・・、0.98のとき、0.99のとき、と忘却率を100通り試して、 アドストックと広告効果の相関が最も高くなるようなパラメータを選びとればよい。

PythonやRで計算してもよいし、100通り程度ならExcelでガガっと計算させるのいいだろう。今回はPythonスクリプトを書いて最適なパラメータを見つけ出してみよう。

本記事の下部に掲載したPythonスクリプトを読み込んだ上で、adstock_optimize(grp, sales)の形で実行すれば以下のような結果になる。

f:id:ekanoh:20180711101905p:plain

グラフより、忘却率=0.78で相関係数が最大値をとるようなので、 忘却率=0.80としていた上記の例は、定量的に考えても筋が悪くはなさそうだ。

2. 商材・メディア・クリエイティブなどに合わせて決める(定性的)

ふたつめは、商材・メディア・クリエイティブなどに合わせて経験的に設定する方法である。

前段で触れたように、商材やクリエイティブの訴求方法によって広告の効果の表れ方が変わるのは 明らかだが、メディアによっても平均的な忘却率が存在すると考えられている。

実際にメディアに携わっている人などからヒアリングしたり、 分析の経験豊富な人から経験的な数字を教えてもらうなどして、忘却率を設定しよう。

半減期

なお、忘却率を表現する指標として半減期というものがあり、

効果の半分が無くなってしまう時点のことを表し、 概ね「広告効果はこれだけ持続しますよ」というものを表現している。

概ね、以下のようなものだと言われている。

  • テレビ:2-6週間
  • ラジオ:1-5週間
  • 新聞:2-3週間
  • 雑誌:4-8週間
  • オンライン(認知):2-4週間
    • Yahooのトップページなどのように、認知目的の広告
  • オンライン(行動):1-2週間
    • 刈り取り型の広告、リターゲティング広告など

(引用元:How Long Does Your Ad Have an Impact?(筆者訳))

忘却率をヒューリスティック(経験的・直観的)に定めたあとは、 上記のようなベースラインと見比べて過度に大きく・小さくなっていないか確認しておくとよいだろう。

さいごに

今回は、以下の3つのキーワードを扱った。

  • アドストック
    • 残存効果・Ad Stock・Carry-Over Effect・Decay Effect などとも言う
  • 忘却率
  • 半減期

広告の効果測定にはさまざまなモデルが提案されていて、日々論文も書かれているため なかなか何を使えばいいか難しいのだが、主要なモデルのひとつとしてぜひ理解しておいてほしい。

付録:Ad Stockを最適化するスクリプト

Python

Calculate the optimal Ad Stock

R

Calculate the optimal Ad Stock in R

「動物は何を報酬として行動しているのか」が逆強化学習で明らかになる

f:id:ekanoh:20180710014836p:plain www.kyoto-u.ac.jp

一般に強化学習というと、

  • どの状況でどれくらい報酬を得られるのかはあらかじめ決められており、試⾏錯誤によって得られる報酬を最⼤化する⾏動戦略を⾒つけ出す

機械学習のモデルであるが、強化学習

  • 動物はすでに最適な⾏動戦略を獲得しているとして、計測された⾏動時系列データから未知の報酬を推定する

モデルである。

素人ながらざっくり解釈すると、

  • 線虫の行動戦略は逆強化学習のモデルで説明可能
    1. 知覚(状態のインプット)
    2. 行動(確率的)
    3. 報酬

というのがfindingsということになりそうだ。

私的には、付随的に明らかになっている

  • 育った環境で行動戦略が確定する
    • 初期値に依存

ということが面白いと感じた。

果たして行動戦略が確定する(※)までどれくらいの期間を要するのか気になるが、 ヒトの教育方法・成長過程は強化学習どれだけモデル化できるのか気になるところである。

(※)モデルの係数が何らかの解に収束する

Excelの重回帰分析でタイタニック号乗客の生存予測をやってみよう

f:id:ekanoh:20180712213856p:plain

qiita.com

はじめに

  • データサイエンスに興味がある
  • Excelなら使える
    • ピボットテーブルなら聞いたことあるぞ!

という方々向けに、Excelの基本的な機能と関数のみを使って、データ分析(重回帰分析)を行う流れを説明していきたいと思います。

みなさまが本格的なデータサイエンスの勉強を始める前の足掛かりとなれば幸いです。

分析

0. 目的

1912年の北大西洋にて、当時最大の旅客船である「タイタニック号」が沈没した事件はみなさまご存知でしょう。 実は、乗客全員が死亡したわけではなく、何とか生存することができた人たちもいました。

それでは、どのような人たちが生き残ったのでしょうか?

  • 階級の高い乗客が優先的に助けられたのでは?
  • 体力がありそうなので若い男性が生き残ったのでは?
  • ...

などなど、いろいろ考えられますよね。

今回は、このような仮説が本当か?ということをデータ分析で検証しながら、 最終的に乗客の情報をインプットすると、その乗客が生存したか否かをアウトプットしてくれる関数を作成することを目指していきましょう。

1. 準備

以下の手順に従ってタイタニック号の乗客データ」をダウンロードしましょう。

  1. Kaggleに登録
  2. タイタニック号の乗客データ(train.csvtest.csv)をダウンロード

エクセルでtrain.csvを開くと、以下のようなデータが見れるはずです。

image

2. データを概観する

2-1. 変数の意味を調べる

まずは、それぞれの列(=変数)が何を意味しているのかを確認しましょう。 Kaggleに記載されているデータセットの情報を見ると、以下の説明があります。

  • PassengerID
    • 乗客の番号
  • Survived
    • 生存結果
      • 1 = 生存
      • 0 = 死亡
  • Pclass
    • 乗客の階級
      • 1 = 1st
      • 2 = 2nd
      • 3 = 3rd
  • Name
    • 乗客の名前
  • Sex
    • 性別
  • Age
    • 年齢
  • SibSp
    • 兄弟、配偶者の数
  • Parch
    • 両親、子供の数
  • Ticket
    • チケット番号
  • Fare
    • 乗船料金
  • Cabin
    • 部屋番号
  • Embarked

年齢や性別だけでなく、兄弟の数や、乗船した港もわかるようですね。 果たしてこれらの情報は生存したかどうかに関係があるのでしょうか?

2-2. ピボットテーブルをつくる

それぞれの変数が生存したかどうかに関係があるかを確認するためには、ピボットテーブルを使います。以下のいずれかの方法でピボットテーブルを作ってみてください。できない場合はこちら

▼ピボットテーブルの作り方

  • [挿入]から[ピボットテーブル]をクリックして、データの範囲を選択
    • データの範囲全体を選択して、Alt -> N -> VでもOK

2-2-1. 軸を決めて比較する

ピボットテーブルをつくると、特定の軸を決めて比較することができます。 たとえば、性別ごとや乗客の階級ごとの生存率を見ることができます。

ここは全くデタラメにやっても構いませんが、0. 目的でも言及したように「階級の高い乗客が助かったのでは?」「体力がありそうなので男性が生き残ったのでは?」などと、仮説を持ちながら検証していくと質の高い分析になるでしょう。

まずは、乗客の階級ごとの生存率を見てみましょう。 果たして階級が高い乗客の方が生存率が高いのでしょうか?

▼ピボットテーブルで乗客の階級ごとの生存率を見る

  1. ROWS(行)にPclassを入れる
  2. VALUES(値)にSum of Survived(=生存者数)とCount of PassengerId(=乗客数)を入れる
  3. 生存率= 生存者数/乗客数を計算する

image

一等級の生存率は63%ですが、二等級は47%、三等級は24%と下がっていっています。 これより階級の高い乗客は生存率が高いことがわかり、仮説は立証されました。

同様にして、性別ごとの生存率を見てみましょう。 果たして男性のほうが生存率が高いのでしょうか?

ROWS(行)にPclassではなくSexを入れるだけですね。

image

男性の生存率が19%で、女性の生存率が74%。 以下のようにグラフにしてみると差が一目瞭然です。

▼ピボットテーブルからグラフをつくる

  • ピボットテーブルの適当な場所をクリックした状態で、[挿入]から[おすすめのグラフ]をクリック
    • またはAlt -> N -> RでもOK

image

つまり、女性の生存率が非常に高いことが分かり、仮説が棄却されました。 AgeSibSp(兄弟、配偶者の数)、Parch(両親、子供の数)など他の変数とSurvivedの関係もぜひ手作業で確認してみてください◎


コラム:なぜ女性の生存率が高いのか?

実は、当時日本人としてただ一人の乗客であった細野正文氏によるタイタニック号事故生き残りの手記に、以下のような記述があります。

... 船客はさすがに一人として叫ぶ者はなく、皆落ち着いていたことは感心すべきことだと思った。ボートには婦人たちを優先的に乗せた。その数が多かったため、右舷のボート4隻は婦人だけで満員になった。その間、男子も乗ろうと焦る者も多数いたが、船員は拒んで短銃を向けた。この時船は45度に傾きつつあった。

乗客はパニック的状況の中でも焦らず、徹底して女性を優先的に救助していたようですね。


2-2-2. 欠損値をチェック

次に、「空欄になっていてデータが入っていないセル」に注目しましょう。 データ分析用語では、欠損値と呼びます。

パッと見ると、AgeやCabinのデータが歯抜けになっていますが、 欠損値がどれくらいの割合を占めているかピボットテーブルを使って確認しておきましょう。

ピボットテーブルのROWS(行)にAgeを入れてみてください。

image

すると、空欄になっているデータが177個あることがわかりました。 全体のデータが891個なので、2割ほどのデータが欠損しているようです。

2-3. 相関係数を計算する

「2つの変数がどれくらい関係があるか」を-1から1で表した、相関係数と呼ばれる指標があります。

この指標が1に近いほど、「片方の変数が大きいとき、もう片方も大きくなる」傾向にあり、これを正の相関と呼びます。 逆に、-1に近いほど、「片方の変数が大きいとき、もう片方は小さくなる」傾向にあり、負の相関と呼びます。

たとえば、2-2-1. 軸を決めて比較する で検証したように、「乗客の階級が1に近い(小さい)とき、生存率が高い(大きい)」ことがわかっていますので、乗客の階級と生存率は負の相関になっているはずです。確認してみましょう。

相関係数を計算する

  1. =CORREL(変数の範囲, 変数の範囲)で、Survivedのデータの範囲とPclassのデータの範囲を指定すればOK

image

3. データを整形する

ここからは本格的にモデルを組むため、データをモデルが読み込みやすい形に整形していきましょう。

3-1. 使わない変数を削除する

まずは、必要のない変数を削除します。

ここでは、分析のやりにくそうなTicketNameを分析に使わないことにして、削除してしまいます。 逆に、2. データを概観する で検証したようにSexPclassは生存率に大きくかかわる変数ですので、必ず残しましょう。

3-2. ダミー変数をつくる

さて、分析を行うために、SexPclassなど、数字ではないデータをダミー変数に変換する必要があります。

ダミー変数とは、数字ではないデータを「0」か「1」で表すことです。 以下の要領で実際に変換してみましょう。

▼Sexをダミー変数に変換する

  1. 男性であること1か0で表す変数 Male の列を追加する
  2. =IF(参照セル="male", 1, 0)
  3. すべての行が埋まるように縦にコピーする

image

このようにすると、変数Maleが1のとき男性、0のときは女性を意味します。

▼Embarked(乗船した港)をダミー変数に変換する

  1. 乗船した港がサウサンプトンであること1か0で表す変数 S の列を追加する
  2. =IF(参照セル="S", 1, 0)
  3. すべての行が埋まるように縦にコピーする
  4. 同様に、乗船した港がシェルブールであることを1か0で表す変数 C の列を追加する
  5. =IF(参照セル="C", 1, 0)
  6. すべての行が埋まるように縦にコピー

image


コラム:乗船した港がクイーンズランドであることを示す変数は要らないの?

もちろん作ることができます。=IF(参照セル="Q", 1, 0)とすればいいですね。

しかしながら、SとCがともに0のとき、それはQになりますよね?

Sexの変数に対して、変数Maleしか作らなかったのと同様にして、あえて作っていません。


image

次に、Cabin(部屋番号)のデータもダミー変数にしていきます。 部屋番号の種類は膨大な数があるため、各部屋番号に対してひとつひとつダミー変数を作っていくと埒があきません・・・。

"Titanic Cabin"でGoogle 画像検索をかけてみると以下のような画像が出てきます。

客室の階数によってAからGまでラベルが降られているようですね! Aに近ければ近いほど、救命ボートに近いため生存確率が上がりそうだな、などということを考えつつ、部屋番号の頭に付いている英字がCのとき、Eのとき、Gのとき、とダミー変数を作っていくことにします。

▼Cabinをダミー変数に変換する

  1. Cabinの頭の英字がCであること1か0で表す変数 CabinC の列を追加する
  2. =COUNTIF(参照セル, "C"&"*")
  3. 同様の作業をA~Fで行う

  4. *アスタリスク)はワイルドカードと呼ばれ、「どんな文字でもいいですよ」という意味

  5. ふつうの=IF()ではワイルドカードは使えないので=COUNTIF()を使う

image

3-3. データを補完する

最後に、2-2-2.で見た欠損値を何とかして補完していきます。 以下のような方法が考えられます。

統計量を使って補完

  • Ageの欠損値を「平均値」や「中央値」で代替

他の変数のデータを使って補完

  • たとえば、CabinPclassの相関をチェック
    • もし相関があれば、Pclassが1に近い人はCabinもAに近いようにする

今回は簡単のため、Ageの欠損値を平均値=AVERAGE()で埋めて、Cabinの欠損値はそのままにしておきましょう。

4. モデルをつくる

4-1. 重回帰分析を行う

重回帰分析とは、乗客にかんする情報が、乗客の生存可能性にどれくらい寄与しているかを分析する手法のひとつです。このとき、乗客にかんする情報のことを説明変数と呼び、乗客の可能性のことを目的変数と呼びます。

式に表すと、以下のような形になります。(回帰式)

f:id:ekanoh:20180708225010p:plain

たとえば... アイスクリームの売り上げ数 = 30 * 気温 + -5 * 値段 + 100 というような形で、気温や値段などの説明変数(の線形和)で、目的変数を表現します。

もし無事にデータ整形が完了していれば、データは以下のように数字だけになっているはずですので、これに対して重回帰分析を行っていきましょう。

image

▼重回帰分析を行う

  1. [ファイル] タブをクリックし、[オプション] をクリックして、[アドイン] カテゴリをクリック
  2. [管理] ボックスの一覧の [Excel アドイン] をクリックし、[設定] をクリックします
  3. [アドイン] ボックスで、[分析ツール] チェック ボックスをオンにし、[OK] をクリック
  4. シートに戻り、[データ]→[データ分析]→[重回帰分析]とクリック

image

  1. [入力Y範囲]にSurvivedの列の範囲を選択(目的変数)
  2. [入力X範囲]にそれ以外の変数の範囲を選択(説明変数)
  3. [ラベル]にチェックを入れておく

うまくいけば、以下のように重回帰分析の結果が得られるはずです。

image

Coefficients(係数)の部分に書かれている数字が、 以下の式でいうところのa_1, a_2, ... , a_n, bに相当しています。

f:id:ekanoh:20180708225010p:plain

すなわち、回帰式の係数が分かったので、乗客の情報を入れればその人が生存するかどうかがわかるモデルが完成しました!

4-2. 推定する

さて、得られたモデルを使って、乗客の情報から生存予測をしてみましょう。 まずは、test.csvからテストデータを開き、分析に使ったデータと同じ形式に変換してください。

image

Regression, Survivedという2つの列を追加したのち、以下の手順で推定を行っていきます。

▼作ったモデルを使って生存予測をする

  1. 回帰式の係数をコピーし、適当な場所にCtrl + Alt + Vで縦横を転置して貼り付け
  2. SUMPRODUCT(ベクトル, ベクトル)を使って回帰式を計算
  3. 閾値を設定して=IF(得られた値 > 閾値, 1, 0)を使って1か0に変換する

image


コラム:閾値はどういう意味?

重回帰分析は、アイスクリームの売り上げなどのようにあくまでも「実数」を返すモデルです。 しかし、今回は生存したかしていないかを「生存」か「死亡」で表現しなければいけないため、

  • モデルがはじき出した数字が1に近ければ「生存」つまり1
  • 0に近ければ「死亡」つまり0

という形で変換を施しています。


4-3. 検証する

最後に、モデルで得られた生存予測を検証してみます。 まずは、テストデータと予測結果いをPassengerID, Survivedだけ残してcsvで出力してください。

image

それをSubmit FormからKaggleに提出すればOKです

image

結果を見ると、Excelで作ったモデルは正答率76%を記録しました

あとがき

いかがでしたでしょうか?

Excelの関数・機能のみを使ってデータ分析を行うイメージが付きましたでしょうか?

Excelは、

  • そんなに重くないデータを概観するにはとてもよい
    • ピボットテーブルやグラフなども使いやすい
  • 重回帰分析もワンクリックでできる
  • 実はすべての変数の相関係数を一気に見ることもできる
    • データ分析の機能をオンにして、「相関」を使えばOK

などなど、データサイエンスをはじめるに当たって基礎的な機能はしっかり持っていますので、 特に初めたてのころは、Excelだけを使ってある程度の分析を行っていけるかと思います!

『UXデザイン入門』に学ぶ、デザイン調査のパターンとポイントまとめ

UXデザイン入門

UXデザイン入門

デザイン調査

  • 「ユーザーについて知る」こと
    • 具体的には、「ユーザー」そのものと「ツールの利用状況・目的」の理解のこと。

モチベーション

  • どんなユーザーが(who)
  • どんな状況で(where, when)
  • どんな目的を達成しようとして(what)
  • (もしあれば)どのようにツールを使っているのか(how)

に加えてさらに、

  • なぜか(why)

を引き出していく。

ポイントは、現行のUIの問題点や改善点の抽出ではなく、 ユーザーの利用状況や目的を理解し、根底のニーズ(why)を理解していくこと。

ターゲット

まず、調査対象のセグメントを設定する必要がある。

ユーザーが特定の領域に限られる場合

たとえば、企業用の会議室予約ソフト。

  • 既に使ってくれている企業
  • 似た環境で既存のシステムを使っている人

など範囲は絞られるので、具体的な組織などにアクセスできればOK。

ユーザーが広範囲に及ぶ可能性がある場合

たとえば、オンライントレードに興味がある人向けのウェブサイト。

ユーザーの設定が抽象的の上、かなり相当数の想定ユーザーがいる。 この場合はユーザーとしての条件を設定し、その条件を満たす代表サンプルをターゲットに設定する。

具体的な手法としては、

  1. 不特定多数に上記の条件に関する事前アンケートを行い、ふるい(スクリーニング)にかける
  2. 条件を満たしたユーザーのみを対象に本アンケート・インタビューを行う

などが考えられる。

デザイン調査のパターン

Contextual Inquiry

  • 観察
    • 目の前でツールを使っている様子を見ながら、
  • インタビュー
    • どのような目的で、どのように利用してるかなど質問

をする方式。エスノグラフィー。 ニーズを探し出すのに最も情報が多いと考えられるが、コストが高い。

ポイント

  • 師弟関係のイメージで、教えを請う形でインタビューを行うこと。

ユーザーインタビュー

  • ユーザーと直接対話する。
  • 対面でも、電話やビデオ通話でも可。

複数人で行うグループインタビューの形では議論の活性化(グループダイナミクス効果)が期待でき、 1:1のインタビュ―で聞けなかった意見が聞ける可能性もある。

ポイント

  • 信頼関係(ラポール)を築くため、世間話や雑談等から始めること。
  • 長丁場にしない。集中力が切れてしまう。

※UXデザイン入門の筆者の経験では、ユーザーの根底に潜むニーズの理解には、広くインタビューするグループインタビューよりも、深くインタビューをする1:1のインタビューの方が有用なデータが得られることが多い、らしい。

観察調査

  • ユーザーがどのようにツールを使っているか観察する。
  • ただし、こちらから働きかけをしない。

eg)「電子案内板」の設計などはフィールドワークで観察。

ユーザビリティテスト

  • ユーザーのタスクを課し、そのタスクを完遂するまでの振る舞いを観察する。

UIの設計にフォーカスした改善・改修のためのユーザビリティテストとは異なり、 あくまでも振る舞いから潜在的なニーズを明らかにすることがポイント。

サーベイ

  • アンケートを作り答えてもらう

このリストの中では最も「定量調査」に近い。

日記調査

  • ユーザーに日記やフォトエッセイを書いてもらう。

中長期的な利用が見込まれるデザインに有用。

eg) 不動産販売サイト

マンションの購入を検討しているユーザーがどのようなメディアを利用して、どのようなWebサイトをどのような順番で利用して、最終的に何が決め手になって購入に至ったか、などをユーザーの記憶が新しいうちに記憶してもらうことで、精度の高い情報が得られる。

プロセス

計画

  • 調査事項を明確にする
  • 手法を決定する

準備

  • 対象ユーザーのリクルーティング
    • 振る舞いが異なりそうなセグメントがわかっている場合、事前調査(スクリーニング)などを行いそれぞれのセグメントから数人ずつ抽出できるとよい。

実施

  • 現地での記録
  • インタビューの実施
  • ディブリーフィング(振り返り)

『UXデザイン入門』に学ぶ、行動変数に基づくユーザーモデリング

UXデザイン入門

UXデザイン入門

ユーザーモデルとは

  • ユーザーの特徴やニーズを表現したもの
  • デザイン調査の結果とデザインを繋ぐ

ペルソナ/シナリオ手法

  • 特徴的なパターンを見出しセグメンテーション
  • メンバーで共有可能な「わかりやすい形」に変換する

フロー

  1. 行動変数の抽出
  2. データのマッピング
  3. セグメンテーション
  4. ペルソナの作成
  5. 行動シナリオの作成
  6. ゴールの導出

行動変数の抽出

  • 行動変数はユーザーの特徴で最も重要でインターフェイスデザインに直接関係
  • モグラ、サイコグラフィックなどは行動変数と相関を持つものを抽出

行動変数とは

  • ユーザーの利用状況・態度・意識・行動傾向・知識など
  • データから自分で定義して1次元の軸にする

KJ法

  • 各ユーザーのデータからユーザーの特徴を表すものをキーワード化する(付箋)
  • 関連するキーワードでグルーピング

データのマッピング

  1. 軸上に各ユーザーをプロットする
  2. 傾向がある部分を◯で囲む
  3. そのセグメントの数=作成すべきペルソナの数である

ペルソナの作成

  • 前段階で作成したユーザーモデルの骨格の肉付け
    • エンジニアやデザイナーが「共感」出来る程度までディテールを作り込む

ディテール

  • 顔写真・名前・年齢・趣味は?
    • 行動変数と相関があるデモグラをうまく利用
  • 利用状況は?
  • 最終的に何を達成したい?

行動シナリオ

  • 作成したペルソナが主人公の物語を作る
  • 具体性を保つため事実を歪曲しなければ着色してよい
  • 最後に、ユーザーがこのツールを使って最終的に成し遂げたい目的・ゴールまたは獲得したい体験を記述

ポイント

  • 人物からその人物の構成要素を抽出し
  • 軸をユーザーの行動ベースで定義
  • セグメンテーションを行う
  • セグメントの構成要素から代表元(ペルソナ)を作成
  • より具体的な人物像に逆変換