データサイエンス:定義と実践的な応用
データサイエンス は比較的新しいものの急速に成長している多面的な学問分野で、さまざまな領域で活用されています。高度な分析手法や予測モデリングのアルゴリズムを用いて、データから有意味な示唆を引き出し、戦略的なビジネスや科学的な問いに答えるのに役立てます。データサイエンスは、技術的スキル(プログラミング、線形代数、統計、モデリング)から、非技術的スキル(結果の効果的な表現とコミュニケーション)まで幅広い技能を組み合わせます。さらに、データサイエンスを適用する業界によっては、利用可能な情報や得られた示唆を正しく解釈するために、堅牢なドメイン知識が必要です。
データサイエンスのアルゴリズムは、大量のデータが収集されている、または収集可能な多様な現場で成功裏に適用できます。金融、商取引、マーケティング、プロジェクト管理、保険、医療、教育、製造、人事、言語学、社会学など、ほぼすべての産業や学術分野が、データの収集・蓄積・分析・モデリングから大きな恩恵を受けられます。
データサイエンスのユースケースとは?
データサイエンスのユースケースとは、利用可能なデータを用いて解決すべき具体的な実世界のタスクを指します。特定の企業の枠組みでは、企業特有の業界コンテキストにおいて、データサイエンス手法で多くの変数を分析します。データサイエンスのユースケースは、解決すべき問題、検証すべき仮説、または答えるべき問いのいずれかになり得ます。要するに、データサイエンスを行うことは、実世界のユースケースを解くことにほかなりません。
各ユースケースの中身は大きく異なる可能性がありますが、常に留意すべき共通点がいくつかあります。
データサイエンスのユースケース計画では、明確な目標と期待成果の明示、作業範囲の把握、利用可能なリソースの評価、必要なデータの提供、リスクの評価、成功指標としてのKPIの定義を行います。
ユースケース解決の一般的なアプローチには、予測、分類、パターン・異常検知、レコメンド、画像認識があります。
いくつかのユースケースは業界をまたいで典型的なタスクであり、離反率予測、顧客セグメンテーション、不正検知、レコメンデーションシステム、価格最適化など、類似の手法を頼りに解くことができます。
データサイエンスのケーススタディはどう解けばよいですか?
この問いへの答えは事例ごとに大きく異なり、企業の事業戦略やケーススタディ自体の核心に左右されます。ただし、どのユースケースにも従える一般的な道筋を概観しておくことは有益です。
正しい問いの定式化。最初のステップは非常に重要で、既存文献やケーススタディのレビュー、ベストプラクティスの見直し、関連理論と作業仮説の構築、ドメイン知識の潜在的なギャップの補完を含みます。その結果、関心のあるケーススタディで答えるべき明確な問いを導きます。
データ収集。この段階ではデータの棚卸しと収集を行います。実務では、表形式できれいに整い分析可能な完全情報からは程遠い、非代表的・不完全・欠陥・非構造化データであることが多いものです。したがって、テーマに有用となり得るあらゆるデータソースを探し特定する必要があります。必要なデータは社内アーカイブ、ウェブスクレイピング、スポンサーからの提供などで入手できます。
データ整形(ラングリング)。これは通常、最も時間とリソースを要する工程です。収集データの品質と代表性を評価し、初期探索を実施します。生データをクリーニング、前処理、変換、操作、マッピングして、より適した形式に整えます。
データ分析とモデリング。整形済みデータを現状の観点から分析し、選択した予測統計モデルに当てはめます。モデル精度を評価し、満足できなければ他の手法を試します。将来シナリオを最も高精度で予測するモデルが得られるまで繰り返します。したがって、この工程も前工程同様に反復的になり得ます。
結果のコミュニケーション。前工程と比べ、ここではプログラミングや技術専門性よりもコミュニケーションやソフトスキルが求められます。最重要な発見と最終結論を経営陣、株主、関係者へ共有します。示唆は、レポート、記事、プレゼン資料の形で提示し、今後の方策を概説するのが一般的です。
業界別のデータサイエンス活用事例
データサイエンスのユースケースは、大量のデータが蓄積されている、または蓄積可能なほぼすべての業界に関わります。この章では、需要の高い分野である物流、ヘルスケア、通信の典型的なユースケースを取り上げます。ここで扱う事例の一部は学際的で、他の多くの領域でも容易に見られるものです。したがって、より普遍的で応用可能であり、解法の全体像を知っておく価値があります。加えて、各業界でデータサイエンス手法によりモデル化できるその他のテーマも挙げます。
ヘルスケアにおけるデータサイエンス
前の3章では、データサイエンスの手法が異なる業界の企業の収益向上にどう役立つかを論じました。ヘルスケアに関しては、この分野のマーケターにとって有益であるだけでなく、深刻な疾病のタイムリーな診断に寄与し、人命を救う可能性すらあります。
医療機関やヘルスケア提供者は、電子カルテ(EHR)システム、ウェアラブルデバイスのデータ、医学研究、請求書類など、無数のソースから膨大なデータを収集しています。革新的なデータサイエンスとデータ分析手法を活用することで、ヘルスケア産業全体が段階的に変革され、将来の発展に向けた最も有望で影響力の大きい解決策がもたらされています。特に、遺伝学、生殖医療、腫瘍学、バイオテクノロジー、放射線技術、予測診断、製薬といった高度専門領域は、データの潜在力を最大限に引き出すことで、まったく新しい段階に到達しました。
医療でデータサイエンスがどのように価値を発揮するかを理解するために、最も典型的なユースケースの1つに焦点を当てましょう。
ヘルスケアのデータサイエンス活用事例:乳がん予測
World Cancer Research Fund International によると、乳がんは女性で最も一般的な癌であり、全体でも2番目に多い癌です。良性・悪性を問わず、乳房の病変を早期に診断することは、治療成功率と生存率を大幅に高めるため、極めて重要です。ここでデータサイエンスが役立ちます。
データマイニング手法の進歩と機械学習アルゴリズムの組み合わせにより、乳がんリスクの予測、初期段階での潜在的異常の検出、その動態の推定が可能になり、病気に立ち向かう最適な計画の立案につながります。本質的には、機械学習の典型的な分類問題です。良いニュースとして、世界中で比較的一般的ながんであるため、綿密な研究が多数行われ、その結果、世界各地の患者から膨大なデータが蓄積されています。
この種のデータセットを分類器で用いる際の主な課題は、強い不均衡が生じうる点です。例えば、結果が「がん/非がん」で表される場合、病変がある確率(少数クラス)は、病変がない確率(多数クラス)よりかなり低くなります。その結果、アルゴリズムは新しい事例を非病変と分類しがちです。したがって、このようなモデルの精度を効率的に評価するには、正しく分類されたケース数ではなく、偽陽性(第I種の誤り)と偽陰性(第II種の誤り)を評価するF1スコアを指標として用いるのが理にかなっています。
米国のある州の乳がん に関する実データセットを見てみましょう。特徴量はドキュメントで詳述されていますが、要するに、乳房腫瘤の細胞核を撮影した各デジタル画像から得られる各属性の平均、標準誤差、最大値です。データセットの各エントリは、悪性または良性腫瘍を持つ女性(つまり、対象女性は全員何らかの腫瘍を有する)に対応します。属性には、細胞半径、テクスチャ、平滑度、コンパクトさ、陥凹、対称性などが含まれます。
import pandas as pd
cancer_data = pd. read_csv( 'data.csv' )
pd. options. display. max_columns = len ( cancer_data)
print ( f'Number of entries: { cancer_data. shape[ 0 ] : , } \n'
f'Number of features: { cancer_data. shape[ 1 ] : , } \n\n'
f'Number of missing values: { cancer_data. isnull( ) . sum ( ) . sum ( ) } \n\n'
f' { cancer_data. head( 2 ) } ' ) 提供:
Number of entries: 569
Number of features: 33
Number of missing values: 569
id diagnosis radius_mean texture_mean perimeter_mean area_mean \
0 842302 M 17.99 10.38 122.8 1001.0
1 842517 M 20.57 17.77 132.9 1326.0
smoothness_mean compactness_mean concavity_mean concave points_mean \
0 0.11840 0.27760 0.3001 0.14710
1 0.08474 0.07864 0.0869 0.07017
symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se \
0 0.2419 0.07871 1.0950 0.9053 8.589
1 0.1812 0.05667 0.5435 0.7339 3.398
area_se smoothness_se compactness_se concavity_se concave points_se \
0 153.40 0.006399 0.04904 0.05373 0.01587
1 74.08 0.005225 0.01308 0.01860 0.01340
symmetry_se fractal_dimension_se radius_worst texture_worst \
0 0.03003 0.006193 25.38 17.33
1 0.01389 0.003532 24.99 23.41
perimeter_worst area_worst smoothness_worst compactness_worst \
0 184.6 2019.0 0.1622 0.6656
1 158.8 1956.0 0.1238 0.1866
concavity_worst concave points_worst symmetry_worst \
0 0.7119 0.2654 0.4601
1 0.2416 0.1860 0.2750
fractal_dimension_worst Unnamed: 32
0 0.11890 NaN
1 0.08902 NaN 提供:
欠損値のみを含む最後の列を削除します。
cancer_data = cancer_data. drop( 'Unnamed: 32' , axis= 1 ) 提供:
がん(悪性腫瘍)が確認された女性は何%でしょうか?
round ( cancer_data[ 'diagnosis' ] . value_counts( ) * 100 / len ( cancer_data) ) . convert_dtypes( ) 提供:
B 63
M 37
Name: diagnosis, dtype: Int64提供:
回答者の37%が乳がんであり、このデータセットは実際には比較的バランスが取れています。
diagnosis変数はカテゴリ値なので、機械学習で使うために数値へエンコードする必要があります。その前に、予測に用いる特徴量と目的変数diagnosisに分割します。
X = cancer_data. iloc[ : , 2 : 32 ] . values
y = cancer_data. iloc[ : , 1 ] . values
from sklearn. preprocessing import LabelEncoder
labelencoder_y = LabelEncoder( )
y = labelencoder_y. fit_transform( y) 提供:
次に、学習用とテスト用に分割し、特徴量を標準化します。
from sklearn. model_selection import train_test_split
from sklearn. preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size= 0.2 , random_state= 1 )
sc = StandardScaler( )
X_train = sc. fit_transform( X_train)
X_test = sc. transform( X_test) 提供:
モデリングには、デフォルトのパラメータでk近傍法(KNN)とロジスティック回帰を適用します。
from sklearn. neighbors import KNeighborsClassifier
from sklearn. linear_model import LogisticRegression
knn = KNeighborsClassifier( )
knn. fit( X_train, y_train)
knn_predictions = knn. predict( X_test)
lr = LogisticRegression( )
lr. fit( X_train, y_train)
lr_predictions = lr. predict( X_test) 提供:
先に見たようにデータセットは比較的バランスが取れているため、評価指標には正解率(accuracy)を使って最も正確なモデルを特定します。
from sklearn. metrics import accuracy_score
print ( f'Accuracy scores:\n'
f'KNN model:\t\t { accuracy_score( y_test, knn_predictions) : .3f } \n'
f'Logistic regression model: { accuracy_score( y_test, lr_predictions) : .3f } ' ) 提供:
Accuracy scores:
KNN model: 0.956
Logistic regression model: 0.974 提供:
本データでは、ロジスティック回帰モデルが、何らかの乳房病変が検出された女性に対して、悪性/良性の予測で最も良好な性能を示しました。
今後の方策として、ロジスティック回帰は調整すべき重要パラメータがないため、学習/テスト分割の別アプローチや、他の予測モデリング手法を試すことが考えられます。
ヘルスケアにおけるその他の一般的なユースケース:
ウェアラブルからのリアルタイムデータのモニタリング
予測分析
医用画像解析
創薬
遺伝学研究
バーチャルアシスタント
顧客データ管理
輸送・物流におけるデータサイエンス
ロジスティクスは製品をある地点から別の地点へ届けるプロセスの組織化を指し、トランスポートは顧客や貨物を輸送する行為を意味します。企業の事業内容(例:ランチデリバリー、郵便、国際配送、航空会社、タクシーやバス)によって、データソースはスケジュール、タイムシート、経路詳細、倉庫在庫一覧、報告書、契約、法的文書、顧客フィードバックなどで表されます。データは構造化・非構造化のいずれの場合もあり、タイミング、旅程、ルート、座標、顧客情報、商品詳細、コストや価格に関する情報を含むことがあります。
サプライチェーンと輸送分野の事業効率は常に明快とは限らず、多数の要因に左右されます。突発的な交通事情、ルート品質、天候、緊急事態、燃料価格の変動、在庫不足、技術的損傷、セキュリティ関連の配送遅延、政府規制や制裁など、枚挙にいとまがありません。さらに近年は新規参入も多く、競争は激化しています。したがって、競争に遅れず運用生産性を高めるため、あらゆる物流・輸送企業にとってビッグデータを分析し有意味な示唆へと変えることが必須になっています。
では、データサイエンスは輸送・物流分野に具体的にどう役立つのでしょうか。以下はその潜在的な適用例のごく一部です。
輸送プロセス全体のエンドツーエンドのトラッキング
活動の完全自動化と可視化
オンタイム配送
ルート最適化
動的プライシング
補給在庫の維持
生鮮品の保護
車両状態のモニタリング
生産ネットワークの改善
顧客サービスの向上
輸送・物流のデータサイエンス活用事例:タクシー車両の最適配置の特定
Uber Technologies Inc.(Uber)は、各種ロジスティクスと輸送サービスを提供する米国企業です。本ケーススタディでは、UberのライドシェアにおけるGPSデータをクラスタリングして、タクシー車両の最適配置を特定します。特に、以下の目的に有用です。
新規リクエストを最寄りのクラスタに割り当て、そのクラスタから最も近い車両を顧客の位置へ派遣する。
時間帯や曜日別などで各クラスタの稼働状況を分析し、需要の高い戦略的ロケーションへ事前に車両を再配置する。
クラスタごとの需要・供給の比率に応じて、料金体系を動的に調整する。
FiveThirtyEight の2014年4月のニューヨークにおけるUberのトリップ のデータセットを使用します。
import pandas as pd
uber_data = pd. read_csv( 'uber-raw-data-apr14.csv' )
print ( f'Number of trips: { uber_data. shape[ 0 ] : , } \n\n'
f' { uber_data. head( ) } ' ) 提供:
Number of trips: 564 , 516
Date/ Time Lat Lon Base
0 4 / 1 / 2014 0 : 11 : 00 40.7690 - 73.9549 B02512
1 4 / 1 / 2014 0 : 17 : 00 40.7267 - 74.0345 B02512
2 4 / 1 / 2014 0 : 21 : 00 40.7316 - 73.9873 B02512
3 4 / 1 / 2014 0 : 28 : 00 40.7588 - 73.9776 B02512
4 4 / 1 / 2014 0 : 33 : 00 40.7594 - 73.9722 B02512提供:
経度をx軸、緯度をy軸として、すべての乗車地点を概略的に可視化します。
import matplotlib. pyplot as plt
plt. scatter( uber_data. iloc[ : , 2 ] , uber_data. iloc[ : , 1 ] )
plt. show( ) 提供:
このデータをクラスタリングするため、k-meansクラスタリングという教師なし学習アルゴリズムを用います。考え方は、すべてのサンプルを等分散のいくつかのグループに分割することです。基本的には、クラスタ数n_clusters(デフォルトは8)を入力としてデータを分割します。最適なクラスタ数を見つけるために、エルボー法というグラフ的手法を使います。手順は以下の通りです。
異なるクラスタ数で複数のモデルを学習し、各モデルのWCSS(各観測が最も近いクラスタ中心からの距離の二乗和)を収集する。
WCSSの値を、対応するクラスタ数に対してプロットする。
WCSSが大きく減少する最小のクラスタ数を選ぶ。
from sklearn. cluster import KMeans
wcss = [ ]
for i in range ( 1 , 11 ) :
kmeans = KMeans( n_clusters= i, random_state= 1 )
kmeans. fit( uber_data[ [ 'Lat' , 'Lon' ] ] )
wcss. append( kmeans. inertia_)
plt. figure( figsize= ( 12 , 5 ) )
plt. plot( range ( 1 , 11 ) , wcss)
plt. title( 'Elbow Method' , fontsize= 25 )
plt. xlabel( 'Number of clusters' , fontsize= 18 )
plt. ylabel( 'WCSS' , fontsize= 18 )
plt. xticks( ticks= list ( range ( 1 , 11 ) ) ,
labels= [ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' ] )
plt. show( ) 提供:
このケースでは、最も適切なクラスタ数は7のようです。この値でモデルを適合し、各乗車地点のクラスタ番号を予測します。さらに、7つのクラスタ中心の位置を加えて、データを再度図示します。
kmeans = KMeans( n_clusters= 7 , random_state= 1 )
kmeans. fit_predict( df[ [ 'Lat' , 'Lon' ] ] )
plt. scatter( uber_data. iloc[ : , 2 ] , uber_data. iloc[ : , 1 ] )
plt. scatter( kmeans. cluster_centers_[ : , 1 ] , kmeans. cluster_centers_[ : , 0 ] , s= 100 , c= 'lime' )
plt. show( ) 提供:
次に、すべての中心の正確な座標を抽出し、データ本体を表示せずに別途プロットします。
centroids = pd. DataFrame( kmeans. cluster_centers_)
centroids. columns = [ 'Lat' , 'Lon' ]
print ( centroids)
plt. scatter( centroids[ 'Lon' ] , centroids[ 'Lat' ] )
plt. show( ) 提供:
Lat Lon
0 40.688588 - 73.965694
1 40.765423 - 73.973165
2 40.788001 - 73.879858
3 40.656997 - 73.780035
4 40.731074 - 73.998644
5 40.700541 - 74.201673
6 40.971229 - 73.611288 提供:
これらの中心をニューヨーク市の地図上に示すと、さらに分かりやすくなります。
import folium
centroids_values = centroids. values. tolist( )
nyc_map = folium. Map( location= [ 40.79659011772687 , - 73.87341741832425 ] , zoom_start= 50000 )
for point in range ( 0 , len ( centroids_values) ) :
folium. Marker( centroids_values[ point] , popup= centroids_values[ point] ) . add_to( nyc_map)
nyc_map提供:
このモデルを使えば、地理座標で表されるニューヨーク市内の任意の地点について、最も近いクラスタを予測できます。実務的には、最寄りロケーションから空車を派遣でき、顧客対応が速くなります。
マンハッタンのリンカーン・センター(Lincoln Center for the Performing Arts)に最も近いクラスタを求めてみます。
lincoln_center = [ ( 40.7725 , - 73.9835 ) ]
kmeans. predict( lincoln_center) 提供:
array( [ 1 ] ) 提供:
クイーンズ区のハワードビーチ(Howard Beach)ではどうでしょうか。
howard_beach = [ ( 40.6571 , - 73.8430 ) ]
kmeans. predict( howard_beach) 提供:
array( [ 3 ] ) 提供:
今後の方策として、他のクラスタリングアルゴリズムの適用、データの異なる切り口(時間帯/曜日/月)での分析、最も負荷が高い(低い)クラスタの特定、データフレームのBase変数とクラスタとの関係の解明などが考えられます。
輸送・物流におけるその他の一般的なユースケース:
需要・供給に応じた動的価格設定
需要予測
手作業オペレーションの自動化
自動運転車
サプライチェーンの可視化
損傷検知
倉庫管理
顧客感情分析
カスタマーサービスのチャットボット
通信業界におけるデータサイエンス
過去数十年で、通信技術は驚異的なスピードで発展し、新たな段階に入りました。今日、私たちはあらゆる種類の電子機器に囲まれ、多くの人がインターネット、特にソーシャルネットワークやメッセージングに文字通り依存しています。時にこのデバイス依存は、対面のコミュニケーションを代替していると批判されます。しかし、世界中の人々と数秒でつながれるようにした通信が、私たちの生活を大幅に便利にしたことは否めません。
これは特に、新型コロナウイルス感染症(COVID-19)のパンデミック期に顕著でした。多くの企業や学校がリモートワークやオンライン学習を採用し、この急速に変化する現実の中で、デジタル接続の品質と円滑さがあらゆる分野でかつてない重要性を帯びました。ロックダウンの時期には、人々はこれまで以上に頻繁に同僚や家族、友人と通話・メッセージのやり取りをする必要がありました。これらの新たな傾向は通信量の急増をもたらし、業界で膨大なデータが生成される結果となりました。
蓄積データの処理にデータサイエンス手法を用いることは、通信業界に多方面で貢献します。
オペレーションの効率化
ネットワークの最適化
スパムのフィルタリング
データ伝送の改善
リアルタイム分析の実行
効果的な事業戦略の策定
成功するマーケティングキャンペーンの創出
収益の増加
ここでは、不要なメッセージの検出・フィルタリングに関連する、通信分野の一般的なタスクを詳しく見ていきます。
通信のデータサイエンス活用事例:スパムフィルタの構築
スパムフィルタリングは、現代のあらゆるテキストコミュニケーションに不可欠な機能です。日々届く詐欺メールから私たちを守ってくれるからです。技術的には、これも分類問題の一例です。履歴データに基づき、新しいメッセージをハム(通常メッセージ)とラベル付けして受信箱へ通したり、スパムとラベル付けしてブロックまたはスパムフォルダへ振り分けたりします。
この目的に人気のある教師あり機械学習アルゴリズムがナイーブベイズ分類器です。確率論の同名の定理に基づき、「ナイーブ」とは各メッセージ内のすべての単語が相互独立であるという前提を意味します。この前提は、自然な単語分散表現や文脈の存在を無視するため厳密には正しくありませんが、少量データのテキスト分類では多くの場合うまく機能し、正確な予測を行います。
ナイーブベイズ分類器には複数のバージョンがあり、適用場面が異なります。多項分布、ベルヌーイ、ガウシアン、フレキシブルベイズなどです。本件(スパム検出)に最適なのは多項ナイーブベイズ分類器です。各メッセージ内の単語数を表すカテゴリまたは連続特徴量の離散的な頻度カウントに基づきます。
SMS Spam Collection Data Set (UCI Machine Learning Repository )に対して、多項ナイーブベイズのスパムフィルタを適用します。
import pandas as pd
sms_data = pd. read_csv( 'SMSSpamCollection' , sep= '\t' , header= None , names= [ 'Label' , 'SMS' ] )
print ( f'Number of messages: { sms_data. shape[ 0 ] : , } \n\n'
f' { sms_data. head( ) } ' ) 提供:
Number of messages: 5 , 572
Label SMS
0 ham Go until jurong point, crazy. . Available only . . .
1 ham Ok lar. . . Joking wif u oni. . .
2 spam Free entry in 2 a wkly comp to win FA Cup fina. . .
3 ham U dun say so early hor. . . U c already then say. . .
4 ham Nah I don't think he goes to usf, he lives aro. . . 提供:
5,572件の人手分類済みメッセージがあります。うちスパムは何%でしょうか?
round ( sms_data[ 'Label' ] . value_counts( ) * 100 / len ( sms_data) ) . convert_dtypes( ) 提供:
ham 87
spam 13
Name: Label, dtype: Int64提供:
SMSの13%が手作業でスパムと識別されています。
多項ナイーブベイズ分類のために、まず以下を行います。
ラベルを文字列から数値にエンコード。本件では二値のため0/1で符号化。
予測変数と目的変数を抽出。
学習用とテスト用に分割。
予測の学習・テストセットのSMS列の文字列をベクトル化し、CSR(圧縮疎行列)を得る。
4番目は補足説明が必要です。ここでは行列オブジェクトを作成し、語彙辞書(予測の学習セット中のすべてのメッセージからのユニーク語とその頻度)でfitし、予測の学習・テストセットを行列に変換します。結果として、予測の学習・テスト用に2つの行列が得られ、列は予測学習セットの全メッセージからのユニーク語、行は対応する各メッセージ、セルの値は各メッセージにおける語の出現頻度となります。
from sklearn. model_selection import train_test_split
from sklearn. feature_extraction. text import CountVectorizer
sms_data = sms_data. replace( 'ham' , 0 ) . replace( 'spam' , 1 )
X = sms_data[ 'SMS' ] . values
y = sms_data[ 'Label' ] . values
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size= 0.2 , random_state= 1 )
cv = CountVectorizer( max_df= 0.95 )
cv. fit( X_train)
X_train_csr_matrix = cv. transform( X_train)
X_test_csr_matrix = cv. transform( X_test) 提供:
次に、デフォルトのパラメータで多項ナイーブベイズ分類器を構築し、精度を確認します。
from sklearn. naive_bayes import MultinomialNB
from sklearn. metrics import accuracy_score, f1_score
clf = MultinomialNB( )
clf. fit( X_train_csr_matrix, y_train)
predictions = clf. predict( X_test_csr_matrix)
print ( f'Model accuracy:\n'
f'Accuracy score: { accuracy_score( y_test, predictions) : .3f } \n'
f'F1-score: { f1_score( y_test, predictions) : .3f } \n' ) 提供:
Model accuracy:
Accuracy score: 0.990
F1- score: 0.962 提供:
その結果、非常に高精度なスパムフィルタが得られました。
今後の方策としては、ベクトル化の多様なパラメータ(例:スパム・ハム双方で過度に頻出する語の閾値)の調整や、学習/テスト分割の別手法の試行、誤検知のごく稀なケースの分析と原因究明などが考えられます。加えて、前処理とストップワード等の低情報語の除去後に、ワードクラウドなどでスパム/ハムの頻出語を可視化できます。最後に、他の機械学習や深層学習アルゴリズム(SVM、決定木、ニューラルネットワーク)を適用し、ナイーブベイズとの結果比較も可能です。
通信におけるその他の一般的なユースケース:
顧客セグメンテーション
プロダクト開発
通話詳細記録(CDR)分析
レコメンデーションシステム
顧客離反率予測
ターゲットマーケティング
不正検知
ネットワーク管理と最適化
ネットワークセキュリティの強化
価格最適化
顧客生涯価値(CLV)予測
データサイエンスのケーススタディ:コース
ここまで、多様な分野におけるデータサイエンスの応用を詳しく見てきました。実世界のデータセットに基づくさらなるユースケースを学び、得た知識と技術を自身の領域での実務課題に適用したい場合は、以下の初心者向け短期コースが役立つでしょう。
ケーススタディ:Pythonによる機械学習での学校予算編成 。DrivenDataの機械学習コンペの事例に基づき、学区の予算に関する課題と、他校と支出を容易かつ迅速に比較する方法を探ります。自然言語処理のテクニックを適用し、学校予算を準備して、その項目を自動分類するモデルを作成します。シンプルな版から始め、段階的に高度化します。加えて、優勝者の解法や他参加者の提出物も確認・分析できます。
pandasでのマーケティングキャンペーン分析 。pandasはPythonで最も人気のあるライブラリで、そのツールキットを確実に使いこなすことはデータサイエンティストの必須要件です。この実践的コースでは、オンライン購読ビジネスの架空のマーケティングデータセットを用い、列の追加、データセットのマージ/スライス、日付列の取り扱い、matplotlibでの可視化など、Pythonとpandasの基礎を発展させます。「このキャンペーンの成果は?」「なぜ特定のチャネルが不調なのか?」「どのチャネルが最も多くの購読者を送客しているか?」などの典型的なマーケティングの問いを測定可能な指標へ翻訳する練習を行います。
Pythonでの米国国勢調査データ分析 。このコースでは、10年ごとの国勢調査と年次のAmerican Community Surveyを自在に扱い、世帯収入、通勤、民族、人員構成といった各種の人口統計・社会経済データを抽出する方法を学びます。PythonでCensus APIから地域別データを取得し、pandasで加工して有意味な示唆を導きます。さらに、geopandasでの地図化も練習します。
ケーススタディ:Rでの探索的データ分析 。Rでのデータ操作や可視化の基礎がある方に最適な短期コースです。実データセットを用い、国連総会の歴史的な投票データを探索します。特に、国間、時系列、国際的な論点にまたがる投票の傾向を分析します。EDAを最初から最後まで実施し、dplyrとggplot2の実践を積み、新たなスキルを学べます。
人事アナリティクス:Rでの従業員データ探索 。Rは統計分析への適性が高いことで知られます。このコースでは、Rの強みを活かし、人事アナリティクスのケーススタディ群に対してデータ操作、可視化、統計検定を行います。人事分野でのデータサイエンス活用は比較的最近ですが、従業員データベースを用いた実行可能な示唆と推奨を期待する企業が増えるなか、非常に有望な領域となっています。
SQLによるデータドリブン意思決定 。このコースでは、SQLを用いて意思決定を支援し、経営陣へ結果を報告する方法を学びます。オンラインの映画レンタル会社のデータベース(顧客データ、映画の評価、俳優の背景情報など)が題材です。顧客の嗜好やエンゲージメント、売上の推移をSQLクエリで分析します。多次元の複雑なデータから主要な示唆を得るOLAPの拡張機能についても学びます。
データサイエンスのハイレベルな専門家を目指す場合でも、自身の分野で役立つコーディングスキルを身につけてデータドリブンな示唆を引き出したい場合でも、上記のリソースは優れた出発点となるでしょう。
まとめ
本記事では、データサイエンスとは何かを多角的に検討し、データアナリティクスとの違い、適用可能な分野、データサイエンスのユースケースの定義、そしてそれを成功裏に解くための一般的な道筋を取り上げました。また、需要の高い業界でデータサイエンスが実務課題にどう有用かを具体的に論じました。既存および潜在的な応用を概観しつつ、各分野で最も一般的なユースケースに焦点を当て、データサイエンスやデータアナリティクスのアルゴリズムでそれらをどう解くかを示しました。他の業界のユースケースについて学びたい場合は、銀行 、マーケティング 、セールス に関するユースケース記事をご覧ください。最後に、その他のデータサイエンスのケーススタディを深掘りするのに役立つオンラインコースもいくつか紹介しました。
最後に興味深い観察を1つ。ここで取り上げた分野はどれも真新しいものではありません。実際、医療や販売のように何世紀も前から存在するものもあります。これらの歴史全体を通じて、グローバルなデジタル化時代の到来よりはるか以前から、これらの業界のデータは何らかの形で収集され、本や文書に記され、アーカイブや図書館に保管されてきました。近年、技術の進歩によって劇的に変化したのは、あらゆるデータに潜む莫大な可能性への根本的な理解と、それを適切に記録・収集・保管することの死活的重要性です。これらの取り組みとデータ管理システムのたゆまぬ改善により、あらゆる業界でビッグデータを蓄積し、さらなる分析や予測へとつなげることが可能になりました。
データサイエンス:定義と実践的な応用
データサイエンスは比較的新しいものの急速に成長している多面的な学問分野で、さまざまな領域で活用されています。高度な分析手法や予測モデリングのアルゴリズムを用いて、データから有意味な示唆を引き出し、戦略的なビジネスや科学的な問いに答えるのに役立てます。データサイエンスは、技術的スキル(プログラミング、線形代数、統計、モデリング)から、非技術的スキル(結果の効果的な表現とコミュニケーション)まで幅広い技能を組み合わせます。さらに、データサイエンスを適用する業界によっては、利用可能な情報や得られた示唆を正しく解釈するために、堅牢なドメイン知識が必要です。
データサイエンスのアルゴリズムは、大量のデータが収集されている、または収集可能な多様な現場で成功裏に適用できます。金融、商取引、マーケティング、プロジェクト管理、保険、医療、教育、製造、人事、言語学、社会学など、ほぼすべての産業や学術分野が、データの収集・蓄積・分析・モデリングから大きな恩恵を受けられます。
データサイエンスのユースケースとは?
データサイエンスのユースケースとは、利用可能なデータを用いて解決すべき具体的な実世界のタスクを指します。特定の企業の枠組みでは、企業特有の業界コンテキストにおいて、データサイエンス手法で多くの変数を分析します。データサイエンスのユースケースは、解決すべき問題、検証すべき仮説、または答えるべき問いのいずれかになり得ます。要するに、データサイエンスを行うことは、実世界のユースケースを解くことにほかなりません。
各ユースケースの中身は大きく異なる可能性がありますが、常に留意すべき共通点がいくつかあります。
データサイエンスのケーススタディはどう解けばよいですか?
この問いへの答えは事例ごとに大きく異なり、企業の事業戦略やケーススタディ自体の核心に左右されます。ただし、どのユースケースにも従える一般的な道筋を概観しておくことは有益です。
業界別のデータサイエンス活用事例
データサイエンスのユースケースは、大量のデータが蓄積されている、または蓄積可能なほぼすべての業界に関わります。この章では、需要の高い分野である物流、ヘルスケア、通信の典型的なユースケースを取り上げます。ここで扱う事例の一部は学際的で、他の多くの領域でも容易に見られるものです。したがって、より普遍的で応用可能であり、解法の全体像を知っておく価値があります。加えて、各業界でデータサイエンス手法によりモデル化できるその他のテーマも挙げます。
ヘルスケアにおけるデータサイエンス
前の3章では、データサイエンスの手法が異なる業界の企業の収益向上にどう役立つかを論じました。ヘルスケアに関しては、この分野のマーケターにとって有益であるだけでなく、深刻な疾病のタイムリーな診断に寄与し、人命を救う可能性すらあります。
医療機関やヘルスケア提供者は、電子カルテ(EHR)システム、ウェアラブルデバイスのデータ、医学研究、請求書類など、無数のソースから膨大なデータを収集しています。革新的なデータサイエンスとデータ分析手法を活用することで、ヘルスケア産業全体が段階的に変革され、将来の発展に向けた最も有望で影響力の大きい解決策がもたらされています。特に、遺伝学、生殖医療、腫瘍学、バイオテクノロジー、放射線技術、予測診断、製薬といった高度専門領域は、データの潜在力を最大限に引き出すことで、まったく新しい段階に到達しました。
医療でデータサイエンスがどのように価値を発揮するかを理解するために、最も典型的なユースケースの1つに焦点を当てましょう。
ヘルスケアのデータサイエンス活用事例:乳がん予測
World Cancer Research Fund Internationalによると、乳がんは女性で最も一般的な癌であり、全体でも2番目に多い癌です。良性・悪性を問わず、乳房の病変を早期に診断することは、治療成功率と生存率を大幅に高めるため、極めて重要です。ここでデータサイエンスが役立ちます。
データマイニング手法の進歩と機械学習アルゴリズムの組み合わせにより、乳がんリスクの予測、初期段階での潜在的異常の検出、その動態の推定が可能になり、病気に立ち向かう最適な計画の立案につながります。本質的には、機械学習の典型的な分類問題です。良いニュースとして、世界中で比較的一般的ながんであるため、綿密な研究が多数行われ、その結果、世界各地の患者から膨大なデータが蓄積されています。
この種のデータセットを分類器で用いる際の主な課題は、強い不均衡が生じうる点です。例えば、結果が「がん/非がん」で表される場合、病変がある確率(少数クラス)は、病変がない確率(多数クラス)よりかなり低くなります。その結果、アルゴリズムは新しい事例を非病変と分類しがちです。したがって、このようなモデルの精度を効率的に評価するには、正しく分類されたケース数ではなく、偽陽性(第I種の誤り)と偽陰性(第II種の誤り)を評価するF1スコアを指標として用いるのが理にかなっています。
米国のある州の乳がんに関する実データセットを見てみましょう。特徴量はドキュメントで詳述されていますが、要するに、乳房腫瘤の細胞核を撮影した各デジタル画像から得られる各属性の平均、標準誤差、最大値です。データセットの各エントリは、悪性または良性腫瘍を持つ女性(つまり、対象女性は全員何らかの腫瘍を有する)に対応します。属性には、細胞半径、テクスチャ、平滑度、コンパクトさ、陥凹、対称性などが含まれます。
欠損値のみを含む最後の列を削除します。
がん(悪性腫瘍)が確認された女性は何%でしょうか?
回答者の37%が乳がんであり、このデータセットは実際には比較的バランスが取れています。
diagnosis変数はカテゴリ値なので、機械学習で使うために数値へエンコードする必要があります。その前に、予測に用いる特徴量と目的変数diagnosisに分割します。
次に、学習用とテスト用に分割し、特徴量を標準化します。
モデリングには、デフォルトのパラメータでk近傍法(KNN)とロジスティック回帰を適用します。
先に見たようにデータセットは比較的バランスが取れているため、評価指標には正解率(accuracy)を使って最も正確なモデルを特定します。
本データでは、ロジスティック回帰モデルが、何らかの乳房病変が検出された女性に対して、悪性/良性の予測で最も良好な性能を示しました。
今後の方策として、ロジスティック回帰は調整すべき重要パラメータがないため、学習/テスト分割の別アプローチや、他の予測モデリング手法を試すことが考えられます。
ヘルスケアにおけるその他の一般的なユースケース:
輸送・物流におけるデータサイエンス
ロジスティクスは製品をある地点から別の地点へ届けるプロセスの組織化を指し、トランスポートは顧客や貨物を輸送する行為を意味します。企業の事業内容(例:ランチデリバリー、郵便、国際配送、航空会社、タクシーやバス)によって、データソースはスケジュール、タイムシート、経路詳細、倉庫在庫一覧、報告書、契約、法的文書、顧客フィードバックなどで表されます。データは構造化・非構造化のいずれの場合もあり、タイミング、旅程、ルート、座標、顧客情報、商品詳細、コストや価格に関する情報を含むことがあります。
サプライチェーンと輸送分野の事業効率は常に明快とは限らず、多数の要因に左右されます。突発的な交通事情、ルート品質、天候、緊急事態、燃料価格の変動、在庫不足、技術的損傷、セキュリティ関連の配送遅延、政府規制や制裁など、枚挙にいとまがありません。さらに近年は新規参入も多く、競争は激化しています。したがって、競争に遅れず運用生産性を高めるため、あらゆる物流・輸送企業にとってビッグデータを分析し有意味な示唆へと変えることが必須になっています。
では、データサイエンスは輸送・物流分野に具体的にどう役立つのでしょうか。以下はその潜在的な適用例のごく一部です。
輸送・物流のデータサイエンス活用事例:タクシー車両の最適配置の特定
Uber Technologies Inc.(Uber)は、各種ロジスティクスと輸送サービスを提供する米国企業です。本ケーススタディでは、UberのライドシェアにおけるGPSデータをクラスタリングして、タクシー車両の最適配置を特定します。特に、以下の目的に有用です。
FiveThirtyEightの2014年4月のニューヨークにおけるUberのトリップのデータセットを使用します。
経度をx軸、緯度をy軸として、すべての乗車地点を概略的に可視化します。
このデータをクラスタリングするため、k-meansクラスタリングという教師なし学習アルゴリズムを用います。考え方は、すべてのサンプルを等分散のいくつかのグループに分割することです。基本的には、クラスタ数n_clusters(デフォルトは8)を入力としてデータを分割します。最適なクラスタ数を見つけるために、エルボー法というグラフ的手法を使います。手順は以下の通りです。
このケースでは、最も適切なクラスタ数は7のようです。この値でモデルを適合し、各乗車地点のクラスタ番号を予測します。さらに、7つのクラスタ中心の位置を加えて、データを再度図示します。
次に、すべての中心の正確な座標を抽出し、データ本体を表示せずに別途プロットします。
これらの中心をニューヨーク市の地図上に示すと、さらに分かりやすくなります。
このモデルを使えば、地理座標で表されるニューヨーク市内の任意の地点について、最も近いクラスタを予測できます。実務的には、最寄りロケーションから空車を派遣でき、顧客対応が速くなります。
マンハッタンのリンカーン・センター(Lincoln Center for the Performing Arts)に最も近いクラスタを求めてみます。
クイーンズ区のハワードビーチ(Howard Beach)ではどうでしょうか。
今後の方策として、他のクラスタリングアルゴリズムの適用、データの異なる切り口(時間帯/曜日/月)での分析、最も負荷が高い(低い)クラスタの特定、データフレームのBase変数とクラスタとの関係の解明などが考えられます。
輸送・物流におけるその他の一般的なユースケース:
通信業界におけるデータサイエンス
過去数十年で、通信技術は驚異的なスピードで発展し、新たな段階に入りました。今日、私たちはあらゆる種類の電子機器に囲まれ、多くの人がインターネット、特にソーシャルネットワークやメッセージングに文字通り依存しています。時にこのデバイス依存は、対面のコミュニケーションを代替していると批判されます。しかし、世界中の人々と数秒でつながれるようにした通信が、私たちの生活を大幅に便利にしたことは否めません。
これは特に、新型コロナウイルス感染症(COVID-19)のパンデミック期に顕著でした。多くの企業や学校がリモートワークやオンライン学習を採用し、この急速に変化する現実の中で、デジタル接続の品質と円滑さがあらゆる分野でかつてない重要性を帯びました。ロックダウンの時期には、人々はこれまで以上に頻繁に同僚や家族、友人と通話・メッセージのやり取りをする必要がありました。これらの新たな傾向は通信量の急増をもたらし、業界で膨大なデータが生成される結果となりました。
蓄積データの処理にデータサイエンス手法を用いることは、通信業界に多方面で貢献します。
ここでは、不要なメッセージの検出・フィルタリングに関連する、通信分野の一般的なタスクを詳しく見ていきます。
通信のデータサイエンス活用事例:スパムフィルタの構築
スパムフィルタリングは、現代のあらゆるテキストコミュニケーションに不可欠な機能です。日々届く詐欺メールから私たちを守ってくれるからです。技術的には、これも分類問題の一例です。履歴データに基づき、新しいメッセージをハム(通常メッセージ)とラベル付けして受信箱へ通したり、スパムとラベル付けしてブロックまたはスパムフォルダへ振り分けたりします。
この目的に人気のある教師あり機械学習アルゴリズムがナイーブベイズ分類器です。確率論の同名の定理に基づき、「ナイーブ」とは各メッセージ内のすべての単語が相互独立であるという前提を意味します。この前提は、自然な単語分散表現や文脈の存在を無視するため厳密には正しくありませんが、少量データのテキスト分類では多くの場合うまく機能し、正確な予測を行います。
ナイーブベイズ分類器には複数のバージョンがあり、適用場面が異なります。多項分布、ベルヌーイ、ガウシアン、フレキシブルベイズなどです。本件(スパム検出)に最適なのは多項ナイーブベイズ分類器です。各メッセージ内の単語数を表すカテゴリまたは連続特徴量の離散的な頻度カウントに基づきます。
SMS Spam Collection Data Set(UCI Machine Learning Repository)に対して、多項ナイーブベイズのスパムフィルタを適用します。
5,572件の人手分類済みメッセージがあります。うちスパムは何%でしょうか?
SMSの13%が手作業でスパムと識別されています。
多項ナイーブベイズ分類のために、まず以下を行います。
4番目は補足説明が必要です。ここでは行列オブジェクトを作成し、語彙辞書(予測の学習セット中のすべてのメッセージからのユニーク語とその頻度)でfitし、予測の学習・テストセットを行列に変換します。結果として、予測の学習・テスト用に2つの行列が得られ、列は予測学習セットの全メッセージからのユニーク語、行は対応する各メッセージ、セルの値は各メッセージにおける語の出現頻度となります。
次に、デフォルトのパラメータで多項ナイーブベイズ分類器を構築し、精度を確認します。
その結果、非常に高精度なスパムフィルタが得られました。
今後の方策としては、ベクトル化の多様なパラメータ(例:スパム・ハム双方で過度に頻出する語の閾値)の調整や、学習/テスト分割の別手法の試行、誤検知のごく稀なケースの分析と原因究明などが考えられます。加えて、前処理とストップワード等の低情報語の除去後に、ワードクラウドなどでスパム/ハムの頻出語を可視化できます。最後に、他の機械学習や深層学習アルゴリズム(SVM、決定木、ニューラルネットワーク)を適用し、ナイーブベイズとの結果比較も可能です。
通信におけるその他の一般的なユースケース:
データサイエンスのケーススタディ:コース
ここまで、多様な分野におけるデータサイエンスの応用を詳しく見てきました。実世界のデータセットに基づくさらなるユースケースを学び、得た知識と技術を自身の領域での実務課題に適用したい場合は、以下の初心者向け短期コースが役立つでしょう。
データサイエンスのハイレベルな専門家を目指す場合でも、自身の分野で役立つコーディングスキルを身につけてデータドリブンな示唆を引き出したい場合でも、上記のリソースは優れた出発点となるでしょう。
まとめ
本記事では、データサイエンスとは何かを多角的に検討し、データアナリティクスとの違い、適用可能な分野、データサイエンスのユースケースの定義、そしてそれを成功裏に解くための一般的な道筋を取り上げました。また、需要の高い業界でデータサイエンスが実務課題にどう有用かを具体的に論じました。既存および潜在的な応用を概観しつつ、各分野で最も一般的なユースケースに焦点を当て、データサイエンスやデータアナリティクスのアルゴリズムでそれらをどう解くかを示しました。他の業界のユースケースについて学びたい場合は、銀行、マーケティング、セールスに関するユースケース記事をご覧ください。最後に、その他のデータサイエンスのケーススタディを深掘りするのに役立つオンラインコースもいくつか紹介しました。
最後に興味深い観察を1つ。ここで取り上げた分野はどれも真新しいものではありません。実際、医療や販売のように何世紀も前から存在するものもあります。これらの歴史全体を通じて、グローバルなデジタル化時代の到来よりはるか以前から、これらの業界のデータは何らかの形で収集され、本や文書に記され、アーカイブや図書館に保管されてきました。近年、技術の進歩によって劇的に変化したのは、あらゆるデータに潜む莫大な可能性への根本的な理解と、それを適切に記録・収集・保管することの死活的重要性です。これらの取り組みとデータ管理システムのたゆまぬ改善により、あらゆる業界でビッグデータを蓄積し、さらなる分析や予測へとつなげることが可能になりました。