2022.12.01
統計は我々の日常生活の中に頻繁に登場します。
ココ最近多く耳にするのは新型コロナの感染者数について「本日は日本全国で○○○人、東京都で○○○人でした、尚重症者は・・・」といったニュースは統計について語っています。
この統計というもの、大量の人・物の状態や動きを一言で表現して伝えてくれる強力な武器なのですが、ザックリと数字をまとめる過程で工夫を加えることで
・大量の数字に隠れている大切なエッセンス/傾向を強調し気付きやすくする
ことができますが同じように
・意図的に誤解させる表現も可能
という面があります。
イマドキの統計はコンピュータによる処理で作られることが大多数ですからコンピュータに関係するアーティクルとして紹介します。
統計の数字は「確率」と表裏一体なので確率も交えながらのお話です。
平均という言葉は統計の用語の中でも最も一般的に、幅広く使用されている言葉ではないでしょうか。何人もいる集団で平均、という値を持ち出すと集団の代表的な数値であると考えますよね。しかし、平均値が我々の体感的な代表値となるには条件があって、
1)集団内の値が極端に広くバラついていないこと
2)集団内に極小数の「突拍子もない」数字がいないこと
個々の値がどれくらいバラついているかを示している値は統計では「分散」や「標準偏差」というものを使用します。これらが大きければ平均値から大きく離れた個体が多いことが伺えますし、小さければ皆平均値周辺に集まっていることを示しています。
受験でしばしば参照される「偏差値」は標準偏差から計算される指数で、個々の点数が平均値ピッタリの時に50とし、点数と平均値との差を標準偏差で割った値に準じて50から上下させる仕組みになっています。多くのケースで偏差値は25~75の範囲に収まります。
平均値が低く、大多数が低得点(標準偏差が小さい)ときに一人だけ高得点取ると非常に高い偏差値になります。
逆に低得点も高得点もたくさんいて、幅広く散らばっているようなケースでは標準偏差が大きいので、高得点取っても偏差値があまり大きくなりません。
このように分散、標準偏差を平均値と併せて観ることが集団の全体像を掴むためには有用です。
小売り系の販売管理システムで「客単価」を算出するニーズがあったとき、それは平均で算出していいのか、中央値にしたほうがビジネスの姿を良く表しているのか、じっくり考えましょう。
両方を計算して表示し、両者に大きな乖離があるときはそこに注目すべき何かが隠れているかもしれません。
スーパーのレジ窓口が複数、例えば3つあって、それぞれに会計待ちの客が数名並んでいます。
客は当然なるべく早く会計して欲しいので行列がいつも長い店は好感度下がります。
商品価格が激安、とかの理由がある場合は別として、とかく待ち行列と称するものは短いほど好感されるものです。
が、お店の経営者としてはレジ窓口を増やせばそれだけ店員の人数が必要なのでお客さんが待ち時間をギリギリ我慢できる程度の窓口数だけ開いておきたい。
この待ち行列問題には
というパラメータに加えて、
が大きく影響します。
モデル化して計算する時には客がランダムに到着する「ポアソン分布」であると仮定するのが現実に近い、とされています。
この条件下で、
「客の到着間隔 ≒ レジが捌く時間/台数 ならば大丈夫だろう」
と考えがちですが、これが罠です。
ランダム到着する客を相手にすると、どうしてもまとまって集中的に到着するときと、全然来なくて閑散としてしまうときが発生します。
レジがずっと休みなしで客を捌き続けないと、単純に「レジが捌く時間/台数」では捌ききれず、客が集中的に到着した時に大行列ができてしまうのです。
この考え方はWeb系のシステムで、サーバがインターネットからのリクエストを受け付けるときにも適用されるものです。
プログラムはどれくらいのレスポンスタイムで1件のリクエストを処理し、並列処理はどれほど同時に動作可能か、は設計可能です。
その上でランダム到着するリクエストをxx件/秒くらいまでは一定のレスポンスで(=待ち行列が短い状態で)サービス可能である、と考えて設計しているのです。
待ち行列は窓口が飽和すると急激に列が長くなる性質があり、Webシステムを運用していてレスポンスタイムを監視対象としている時に「まだまだイケる」状態から「ちょっと混んでいるな」状態を経て「激混み」になるような気がしますが、「ちょい混み」になったら手を打とう、などと考えていると一気に「激混み」になってしまいます。
現実世界では例えば駅チカのスーパーでは電車が到着するタイミングに合わせて客がまとまって来店する、といった現象が起こるのでポアソン分布では実態に合わなくなってきます。Web系のサービスを行うにも利用者が昼休みのタイミングで大量アクセスしてくる、といった状況を適宜配慮していく必要があります。
今ゲーム業界はソーシャルゲーム(ソシャゲ)全盛期です。ソシャゲの特徴として、ゲームそのものは無料でインストールでき、プレイ中の広告表示で収入としたり、ゲーム内で有料アイテムの購入を促して収入とすることにあるかと思います。
この有料アイテムとして「ガチャ」があります。所謂カプセルトイ「ガチャガチャ」を模した名称で、一定確率で「当たり」となる稀な(レアな)アイテムが出るためくじ引き的な要素があり、当たりを引くまで何度もガチャを購入してしまう僅かなディーププレーヤーにゲーム会社は支えられていると言われています。
ゲームでのガチャはソフトウェアで実現されている故に、物理ガチャのように入っているアイテムを見ることができないので、
というルールが景品表示法によって定められています。
例えば「Sレア以上!」と謳っているのに「Sレア以外は出ない」とか、当たる確率について虚偽の数字を表示しているなどがこれに該当します。
どのソシャゲもガチャの画面には、どのレア度のアイテムが何%で出るかを厳密に表示しなければ法に抵触します。
さてここでも確率・統計は我々の直感的感覚を裏切ってきます。
例えばあるガチャで自分の欲しいレアアイテムが1%の確率で出ます!と謳われていました。
このガチャを100回引いたら100%確実にアイテムをゲットできるでしょうか?
1%を100回・・・100%ゲットできて欲しい、と考えてしまいそうですが、ソシャゲのガチャについてはゲットできる確率は63%です。
上の絵のような物理アイテムのガチャでは「引く=消費」なので、例えば100個カプセルが入っている物理ガチャなら全数消費になりますから100%アタリをゲットできます。
これら2者の違いは、ガチャを引いた後にくじの母数が減るか減らないか、の違いに依ります。引いたくじを箱に戻すか戻さないか、の違いとも言えます。
物理ガチャは1回引けば残りは99個、引く毎にどんどん減っていきます。
ソシャゲのガチャは単なる乱数発生から計算しているだけなので母数は減りません。ガチャ引く度に引いたくじを箱に戻しているようなものです。そのためにこのような違いが生じるのです。
ソシャゲのガチャは購入者に一方的に不利なわけではなく、当たりが何回も出る可能性がある点では物理ガチャよりも有利です。
ソシャゲで物理ガチャのように、一度引いたくじを「使用済み」にして引ける回数に上限を設定している場合はボックスガチャと呼んで区別しているゲームもあり、この場合の当選確率は物理ガチャと同じになりますが、当然当たりは最初に設定している個数が上限です。
ビジネスシステムではガチャのような概念の仕組みを扱うことはあまり無いと思いますが、日常生活で間違った期待を抱いて損しないための防衛知識として知っておくと良いかもしれません。
また「平均」の話です。平均にはダマサれやすい要素がいっぱいあるんです。
厚労省発表の日本人の平均寿命、2020年辺りから男性が81歳、女性が87歳となっています。
さて(仮に)私が男性50歳です、としたら私が生きられるのはあと31年くらいかぁ・・・
ってのが陥りやすい誤りで、実際はもっと永く生きられる可能性が高いです。
単に平均寿命と言った時には老衰で天寿全うされた方もいれば、新生児0歳死亡まで含まれます。
「平均値」のところで触れたように、飛び抜けて離れた値が入っていると平均値は代表として相応しくなくなります。寿命の場合は乳幼児の死亡率が高いことが影響して平均値を下げています。
更に、「今50歳」の人が「余命」を考える時には平均の母集団として「50年間生き抜いた人」だけを集めて平均を計算するので、49歳までに亡くなった方が全て計算外になるので余命は必ず平均寿命よりも「長生き」になります。余命で「平均xx歳まで生きられる」という数字は現年齢によって変わってくるのです。
81歳男性は平均寿命に達してしまっていますが、余命0年ということはないですよね。
実は「平均寿命」とは0歳のときの平均余命なのです。
平均の話をしている時に母集団がいつの間にか変わってしまっていることに気が付かないと大きな勘違いを生む原因となります。
例えば高校受験のとき、志望校の偏差値は合否を予想する上で重要な数字です。結構な難関高校に合格しました、さて次は大学受験だ。志望大学の偏差値は、と調べていると有名な難関大学なのに偏差値が意外と低いな・・・と気が付きます。
偏差値は全受験生の点数から各人の偏差値を算出して、その大学に合格できる受験生の偏差値を以て大学の難易度指標としたものです。ここで母集団となるのは「全受験生」ですが、高校受験と大学受験では母集団の「受験生」が全く異なり、進学率がほぼ100%の高校受験と55%程度の大学では母集団が異なるために高校の難易度偏差値は大学の難易度偏差値と比較できないことになります。
メディアが「1,000人に調査した結果、○○○でした」的なことを言っている時は自分たちに都合のいい母集団から調査したことを隠して発表している可能性があります。回答者の年齢層は?均等な年齢層か?性別は?現居住地は?世帯構成は単身/家族?職業は?これらが明記されている統計なら信用度が高そうです。
ネットのアンケートは手軽なので近年多用されていますが、元々トピックに興味ある人が回答し興味ない人は回答しない傾向が強く出るので質問者に好意的な回答が得られやすい注意すべき母集団です。
システムで何らかの平均値を算出するときは母集団が何なのか、気を付けよう、というお話です。
情報システムを運用する側の、所謂「中の人」にとって稼働率はとても難しい問題です。
SLA(Service Level Agreement)という概念が一般化してきて、【SLA 99.99%!】と明言しているサービスも珍しくなくなってきました。
さて稼働率99.99%というのは一見、「ほとんど止まらない」ように感じてしまいますので、具体的にどれほどなのか計算してみましょう。
1年=365日=8,760時間=525,600分です。
99.99%稼働ということは 0.01% は故障するかも、ということですから故障時間を計算すると
525,600x0.0001=52.56分
つまり、約1時間/年 くらいは故障するかも?というのがSLA99.99%の正体です。
どう感じますか?銀行のATMが1年に1回、1時間故障するとニュースのネタになるレベルの事故です。クリティカルなサービスを提供するシステムでは許してもらえないかもしれません。
ではSLA 99.9999% ではどうでしょうか。
525,600x0.000001=0.5256分≒31秒
1年に31秒だけ止まっちゃう。銀行ATMなら許してもらえそうでしょうか。気が付かないレベルかもしれないですね。
でも原子炉を運転するシステムとか、病院で生命維持装置につながるシステムだったら1秒でも止まったら大惨事ですね。
人間は9の並びがあると「ほとんど10!」と単純化して考えたくなる性質があるようです。
ですが9から10の間は0と1の間と同じだけ離れているのです。上記のように具体的な値を計算して妥当な値かどうか考えましょう。
システムはSLAの9を一つ増やすのに構築・運用コストが2倍になる覚悟が必要です。何故ならインフラを支えているコンポーネントは必ず故障するので、「SLAを上げること=故障させない」ではなく、「=故障しても止まらない」という考え方で2重化、3重化を施すことで「止まらない」を実現するからです。
因みに、99.99%は読みが長ったらしくなるので「フォーナイン(4つの9)」と呼ぶとこの業界のプロっぽい感じがします。
同じように 99.9999%は「シックスナイン」、99.99999999%は「テンナイン」といいます。
確率の分野で頻出する問題です。
あるクラスで50人の生徒がいます。このクラス内に同じ誕生日の人が1組以上いる確率は何%でしょう。
365日ある誕生日を50人の生徒がランダムに選んでいるような状態です。
直接計算しようとすると同じ誕生日の人が3人、4人、、、の場合があったり、誕生日がツーペア、スリーペアの場合だったりを全て考慮する必要があり手に負えません。
そこで「クラス全員が異なる誕生日」の確率が簡単に計算できるので、これを100%から引けば「同じ誕生日の人がいる」確率になります。
最初の一人は365日、どの日でも良いので確率=1
二人目は最初の人の誕生日以外ならいつでも良いので 364/365=0.99726
三人目は最初の二人の誕生日以外ならいつでも良いので 363/365=0.99452
・・・
50人目は他の49人の誕生日以外ならいつでも良いので 315/365=0.86301
これらの数字50個を全て掛けると 0.02556 つまり2.5%です。
ということは問題の「同じ誕生日の人が1組以上いる確率」は97.5%ということです。
予想よりもかなり大きい確率ではありませんでしたか?
人間の感覚で「ランダムに任せておけば数字はバラつく」と思いがちなところ、結構裏切られます。
トランプゲームでコントラクトブリッジというのがあって、これはジョーカーを除いた52枚のカードを4人のプレーヤに13枚ずつ配るところから始まるのですが、カードのスート(スペード、クラブ、ダイヤ、ハート)が配られるときのバラつきパターンとして各スートが4,4,4,5枚になるのが多そうに思いませんか?ところが実際にプレイすると多いのは各スート 3,4,5,5枚のパターンです。
「キレイにバラつく」=「それなりに規則性を持った状態」なので、高確率で「キレイにバラつく」ことはないみたいです。
誕生日問題も同類で、クラス全員が異なる誕生日になるということはそれなりの規則性を満たさないと成立しない状態であり、50人クラスでは2.5%しか発生しないよ、ということなのです。
この現象があるので、システム作るときは「意外と同姓同名は多い」「同じ生年月日は珍しくない」前提で考えましょう。
故障の話です。
例えばパソコンはだいたい5年も使えばそろそろ壊れても仕方ないか、くらいの感覚をお持ちの方もいるでしょう。
エアコンは標準的な耐用年数10年らしいので10年すぎるとそろそろかな?という感じです。
ここでまたくじ引きの話をします。
くじ引いてハズレでした、で当たるまで何度もくじを引き続けるとします。その時、
「連続10回ハズレたから、そろそろ当たるだろう」
は前記のガチャと同じ考え方で、ボックスガチャ的なくじの場合のみ成立します。
宝くじのように母数が巨大なくじの場合は1ユニット買い尽くす(10万枚です)くらいの買い物しないとボックス的にはなりませんが。
つまり一般的には1回目だろうと、10回ハズレた後の11回目だろうと当たる確率はほとんど同じ、と考えるべきなのです。
故障の話に戻ります。
機械の故障は大別して「摩耗による」ものと「一定確率で起こる」ものがあります。
摩耗は「動く」部品があれば必ず発生するので、例えばモーターが内蔵されている機械は必ず摩耗故障の可能性があります。
摩耗は稼働時間に比例して蓄積すると考えられるので、この摩耗の量が「過去の稼働実績を記憶している」と見做すことができます。
モーター以外では、半導体部品も「経年劣化」という摩耗のような現象を起こします。
見た目、半導体部品(ICなど)に動くところなどありませんが、ミクロの世界では半導体結晶の中で整然と整列していた原子が使用中の各種ストレス(高熱、高エネルギー電子など)により配列を乱されてしまったり、部品内のミクロ配線が劣化、断線することで摩耗と同様に寿命を迎えます。
これら経年的に起こる故障は機械にダメージが蓄積される≒記憶される結果として起こる、と考えられるわけです。
経年劣化する部品を使用している機器は中古品で買う時は要注意ですね。
では摩耗に依らない故障、「一定確率で起こる」故障はどんなものがあるでしょうか。
摩耗故障がボックスガチャ的なものと例えましたが、一定確率で起こる故障はボックスではないガチャのようなものと考えられます。
つまり運良く(運悪く!)当たりを引くと故障するわけです。
このタイプの故障は過去に影響されず、「長年故障しなかったからそろそろ壊れるかな?」に該当しません。買ってすぐの新品でも同確率で故障します。
古いタイプの白熱電球は経年劣化でフィラメントが切れるという寿命もあるのですが、それ以外に点灯の瞬間に流れる大電流(突入電流といいます)で切れてしまう現象があり、これは使用時間に依存せず確率で発生する、とされています。なので使用時間と言うよりはオン・オフを繰り返すと遭遇するチャンスが多くなるわけです。
別の事例で、電子機器、特にパソコン等の情報機器で急にハングアップしてしまったり、ブルースクリーンが出て再起動しろ、といわれたりすることがあります。原因不明なことが多いのですが、その中の一部は宇宙からの中性子がICチップ内の原子に衝突し、情報を記憶しているプラス・マイナスの電気状態を変えてしまうことで誤動作を引き起こすのが原因とされていて、「宇宙線ソフトエラー」と呼ばれます。
このエラーも経年劣化とは全く無関係に一定確率で起こるので、「機械は過去を記憶していない」タイプの故障です。
過去を記憶しているタイプの故障は故障を起こす前に機器を刷新するのが効果的対策です。故障した時にどれくらいの損害が発生するかを見積もっておいて、それを防ぐのに見合う投資額はどれくらいか、を考えて買い替えサイクルを計画することになります。
過去を記憶しないタイプの故障は買い替えでは緩和できません。システムを設計する時点で再試行できるように考えるとか、2重化するとかの難しい対策が必要になりますが、幸いこのタイプは発生頻度はずっと少ないです。
確率・統計というと「確実なことは分からない曖昧な話」と思っていませんか。
確かにサンプル数が少ない事例に確率・統計を適用すると使い難い、使えない、ということになりがちです。
逆にサンプル数が多くなればなるほど、導かれる規則から逃れられない強力なツールとなります。
統計の性質を理解して使えるところでは使い倒して、使い難いところでは無理に統計的手法に頼らずに数字と上手に付き合っていきましょう。