データサイエンティスト上がりのDX参謀・起業家

データサイエンティスト上がりのDX参謀・起業家のブログ。データ分析や事業について。自身はアーティスト、経営者、事業家。

医療分野から学ぶベンチマーク分析の有用可能性

ビッグデータ、データサイエンス、AIなどのブームによって、データを扱ったりエビデンスを作ることがビジネスに大きな貢献をもたらすことは社会的に合意されてきてきました。データを扱うことは統計学が基礎になっていて、統計学は医療分野で最も発展してきました。AIでさえ基礎となる考え方は統計学です(基本は回帰分析やA/Bテスト)。

 

その医療分野で、エビデンスのレベルが階層化されています(wikipediaから引用)。

f:id:isseing333:20200610111556p:plain

 

この内容をビジネス的に読み替えると、1〜2段目の実験や症例報告は個人の経験や知見、3〜4段目の症例対照研究やコホート研究は調査データや社内DBの分析、ランダム化比較試験はA/Bテスト、になります。ここまではやられている企業はすでに相当増えていると思います。

 

その次のエビデンスは、医療ではメタアナリシスになっています。これは、複数の分析結果(論文)の内容をとりまとめて、さらに分析をすることです。ビジネスでは、複数の調査結果や複数の企業のデータをとりまとめることになると思われます。自社のデータを既に分析しつくした場合、次に欲しくなるのは同業他社のデータや分析ではないでしょうか?ベンチマークとも言われる分析です。ビッグデータやデータ統合が進んできたら、そのようなことも可能になってくるでしょう。

 

一番上はガイドラインとなっており、これはエビデンスというよりはエビデンスの結果作られる業界水準になるでしょう。実質、データから生み出される最大のエビデンスベンチマークとなり、今後ビジネスで活用されていくことが期待されます。

疫学の始まり:ジョン・スノウのコレラ研究とデータの重要性

久しぶりにブログを書きます。コロナが広まり、なんとか被害を少なくするために、疫学という学問が活用されています。疫学は医療系のデータを扱う統計学で、1800年代にジョン・スノウという研究者の研究が始まりと言われています。私は東京大学の健康科学科と大学院時代に専攻していました。

 

イギリスでコレラが流行したとき、コレラがどうして起こるのか何も分かっていませんでした。空気感染じゃないかと言われていましたが、同じ地域に住む人でも非感染者がいることに疑問をもち、ジョン・スノウは汚い水を飲むとコレラにかかるのではないかという仮説を立てました。そして実際に汚染した水を飲んでいる家庭のデータを集めたところ、コレラにかかっている家庭と一致したため、行政がこの結果をもとに汚い水を供給している井戸を閉鎖し、コレラが収束したと言われています。

 

コレラの菌が発見されたのはそれから30年後で、原因がわからなくても、解決ができたということになります。正しくデータを集めて正しく分析すれば、ロジックが分からなくても十分な問題解決ができるということが、統計学(疫学)の強力なポイントです。

 

ジョン・スノウは仮説を立ててデータを集めましたが、現代はIT化によってさまざまなデータが溜まっています。それを正しく分析すれば、仮説が十分でなくてもいろんなことが分かります。もちろん医療だけでなくビジネスでもデータは活用できますし、企業の経営判断や、コレラのときのように政治判断にも影響するでしょう。私はこれまでさまざまな企業にコンサルして業績に関わるような分析結果を出してきましたが、今後さらにデータを活用する機会が増えていくのではないでしょうか。アフターコロナ時代でも、データがさらに重要になっていくと思われます。

 

異常検知について

この本を読みました。

いろんな場合でどんな手法があるかが書いてあるので、とても整理されています。

まとめると、

  • 1次元で山がひとつの異常検知:ガンマ分布で異常度を計算する
  • 多次元または山が複数ある異常検知:クラスタリング
  • 不要な次元を含むデータからの異常検知:主成分分析による異常検知
  • 目的変数のある異常検知:リッジ回帰
  • 周期のわかる時系列データの異常検知:自己回帰モデル
  • 周期のわからない時系列データの異常検知:部分状態空間モデル

って感じです。
多くの場合は、クラスタリングと主成分分析異常検知でまかなえます。

時系列異常検知のできる部分状態空間モデルは魅力的ですが、本によるとRのパッケージは充実してないみたい。要調査。

ggplot2でロジスティック回帰の近似曲線を描く

バージョンアップで昔の指定方法ができなくなってた。
調べたら下記のようにやれば描ける。ggplot2は綺麗なんだけど仕様変更が多いから困る。

binomial_smooth <- function(...) {
  geom_smooth(method = "glm", 
              method.args = list(family = "binomial"), ...)
}

ggplot(data, aes(x, y)) + geom_point() + binomial_smooth()

メモ:ROC曲線の最適カットオフを計算する関数

epiライブラリのROC関数ではカットオフまで計算してくれなかったので、ROC関数を計算するように書き換え。

library(epi)

ROC1 <- function (test = NULL, stat = NULL, form = NULL, plot = c("sp", 
    "ROC"), PS = is.null(test), PV = TRUE, MX = TRUE, MI = TRUE, 
    AUC = TRUE, grid = seq(0, 100, 10), col.grid = gray(0.9), 
    cuts = NULL, lwd = 2, data = parent.frame(), ...) 
{
    rnam <- if (!missing(test)) 
        deparse(substitute(test))
    else "lr.eta"
    if (is.null(form)) {
        if (is.null(stat) | is.null(test)) 
            stop("Either 'test' AND 'stat' OR 'formula' must be supplied!")
        lr <- glm(stat ~ test, family = binomial)
        resp <- stat
        Model.inf <- paste("Model: ", deparse(substitute(stat)), 
            "~", deparse(substitute(test)))
    }
    else {
        lr <- glm(form, family = binomial, data = data)
        resp <- eval(parse(text = deparse(form2)), envir = lr$model)
        Model.inf <- paste("Model: ", paste(paste(form)[c(2, 
            1, 3)], collapse = " "))
    }
    m <- as.matrix(base::table(switch(PS + 1, test, lr$fit), 
        resp))
    m <- addmargins(rbind(0, m), 2)
    fv <- c(-Inf, sort(unique(switch(PS + 1, test, lr$fit))))
    nr <- nrow(m)
    m <- apply(m, 2, cumsum)
    sns <- (m[nr, 2] - m[, 2])/m[nr, 2]
    spc <- m[, 1]/m[nr, 1]
    pvp <- m[, 2]/m[, 3]
    pvn <- (m[nr, 1] - m[, 1])/(m[nr, 3] - m[, 3])
    res <- data.frame(cbind(sns, spc, pvp, pvn, fv))
    ddaattaa <- data.frame(lr[21], lr$fit)
    names(res) <- c("sens", "spec", "pvp", "pvn", rnam)
    auc <- sum((res[-1, "sens"] + res[-nr, "sens"])/2 * abs(diff(1 - 
        res[, "spec"])))
    
    mx <- max(res[, 1] + res[, 2])
    mhv <- which((res[, 1] + res[, 2]) == mx)
    mxf <- fv[mhv]
    
    cutoff <- ddaattaa[ddaattaa$lr.fit == mxf, ]
    
    invisible(list(res = res, AUC = auc, lr = lr, cutoff = cutoff, optimal = res[mhv, ], 
                   n = nrow(ddaattaa), freq = table(ddaattaa[, 1])))
}

b <- ROC(form = a[, 1] ~ a[, 2], plot="ROC")
c <- ROC1(form = a[, 1] ~ a[, 2], plot="ROC")
c$cutoff
c$AUC
c$optimal
c$n
c$freq

【厳選】ビジネスを成功に導くための14のデータ分析メソッド【日経ムック】

日経ビッグデータから出版されました『実践!”超”分析の教科書』の監修と執筆をしました。この本は、「分析はスゴいって騒がれてるけど、自分には難しそう。でも興味はある」と思っているような初心者のために、分析って何なのか分かりやすく伝えたいという思いで、監修・執筆しました。

“超

“超"分析の教科書 (日経BPムック)


自分が担当したのはケーススタディとキーワード解説の部分です。分量でいうと本の約半分くらいです。あと、最初のインタビューにも出ています。

ケーススタディはまず、私がiAnalysis(アイアナリシス)社で3年間コンサルをしてきて、ビジネスに効果が出た分析方法だけをピックアップしました。毎日ビッグデータとかアナリティクスとか騒がれてますが、「結局どんなことをするの?」的なことを疑問に思われてる方が多いかと思います。そういう方に、「データを活用するとこんなことができますよ」と説明しています。それも、ビジネスに役立つものだけを厳選しているので、これだけ押さえていれば、まずは充分だと思います。いろんなところで報道されている事例は、だいたいこれらのどれかに入るんじゃないでしょうか。

  1. モニタリング
  2. KPI厳選
  3. マーケティング調査
  4. 顧客分析
  5. テキストマイニング
  6. 仮説検証
  7. 広告効果測定
  8. 施策効果検証試験
  9. 反応スコアリング
  10. ライフタイム分析
  11. 需要予測
  12. 故障予測
  13. 個別最適化
  14. レコメンデーション


そしてその手法にあった事例を、たくさんの企業の中から選ばせてもらいました。分析の初心者にも興味を持ってもらうため、誰でも知っている大企業と、業界で注目を集めている企業を織りまぜて選びました。実に多くの企業が、データを活用して事業を拡大しています。

  1. イーグルバス
  2. セリア
  3. りそな銀行
  4. ローソン
  5. 明治安田生命/富国生命保険
  6. セブン&アイ・ホールディングス
  7. DeNA
  8. 日本エスリード
  9. 日本航空
  10. オルビス
  11. 大林組
  12. 大阪ガス
  13. アサヒビール
  14. 良印計画

これからより一層データ活用を促進していこうと思われている方には、とても参考になる内容だと思います。お付き合いのある大手システム開発会社様では、数十冊購入し、社内教育に利用するとおっしゃっていました。


また、iAnalysis社では”オリオン”という、ビジネスツールにアナリティクス機能を付加させたウェブサービスを開発しています。オリオンは、日常業務のビジネスツールとして利用しつつ、高度なアナリティクスを簡単に業務に活かすことを目指したサービスです。あらゆる現場で使ってもらうために、スマホタブレット・パソコンのどれからでも利用できます。現在(2014/12/12)、オリオンはクローズドα版なので、URLは一般公開していませんが、”超”分析の教科書のP37に限定でデモ版を公開しています。ユーザー登録できますし、登録したアカウントは正式サービス後も使えますので、興味がある方は教科書を買って登録してみて下さい。


オリオンの一部機能は、日経ビッグデータ様で取り上げて頂きました。
「有力サイエンティストが独自開発ツールで事業拡大、iAnalysisがIoTベンダーと連携」

オリオン自体は、あらゆる業種業態のビジネスシーンで活用することを考えています。その中で、IoTやM2Mで発生するデータも扱えるようにしていきたいと考えています。


オリオンの詳細は、URLも含めて年明けあたりに公開しようと思っています。そのときに、オリオンの機能も順次紹介していこうと思います。