CONFIDENCE INTERVALS

2006年5月に@cosmeビジネスナビというサイトに書いたコラムを転載

家電量販店で「100人に1人はタダ!!」というセールを時々見かけます。な、なんつー太っ腹なんだと思ってつい買いにいこうと思ちゃうんですが、よく考えるとお店にとっては実質的に「全品1%OFF」と同じなんですよね。実態としてはほぼ同じなのに「全品1%OFF」と「100人に1人はタダ!!」ではずいぶん印象が違う。この販促案を考えた人はすごい。

さて、化粧品を上市すると、比較的軽微なものから要度の高いものまで程度の差こそあれ多かれ少なかれ必ずといっていいほど肌トラブルが発生します。もちろん全ての人に肌トラブルが起きないことが最も望ましいことですが、肌トラブルの原因は人によって実に様々なので全ての人にとって肌トラブルが起きない化粧品を作るのは限りなく不可能に近いというのが実際だと思います。そこで、配合成分をすべて開示して消費者が「自分にとって」良いもの悪いものを選択できるようにしたのが全成分表示制度の意義の一つだったと思います。おっと話がそれそうになった。先に書いたとおり、人によって肌トラブルの原因は実に様々なので市販後の肌トラブル件数が0ということはまずありません。どの会社でも「ある基準以上に重症度が高い肌トラブルが起きない」ことや「販売数量に対する肌トラブルの発生率がある一定値以下である」ことなどの基準を定めて対応にあたっていると思います。

ところで、化粧品を世に送り出す前に社員や限られた人に使用してもらい、肌トラブルがない、または十分に少なければ多くの人によって肌トラブルを起こさないだろうということを確認しておくことがあります。たとえば肌トラブルの発生率が0.05%以下であることを基準に化粧品を作るとして、市販前の使用試験でこれをどの程度推定できるんでしょうか? 「あ~ぁ、学生のとき統計学をもっと真面目にやっておくんだったぁ」としみじみ嘆く今日この頃なんですが、業界は違うけど統計に詳しい先輩のお知恵を拝借しながら頭をひねってひねって考えてみました。単純に考えれば「10,000人に使ってもらって肌トラブルが5人以下だったらオッケーでしょ」ってことになりますが、ところがどっこい試験結果の偶然性を考慮する必要があります。10,000人で試験した結果肌トラブルが4名だったとしても「たまたま4人で済んだ」または「たまたま4人もいた」可能性を考えると市販後の肌トラブル発生率は0.04%からある程度幅をもった範囲のどこかになると考えられます。ではどのくらいの幅を持っていると考えたらいいでしょうか。これは予測幅にどの程度の信頼性を求めるかによって変わってきます。幅を広くとれば信頼性は高くなる(予想が当たりやすくなる)し、幅を狭めると信頼性は下がる(予想がはずれやすくなる)。10,000人で試験して4人の肌トラブルがあった場合に信頼区間を90%(90%の確率で当たる)と設定すると市販後の肌トラブル発生率は0.04±0.033%と予測されます。これは、10%の確率でこの予想がはずれる(つまり肌トラブルが0.007%を下回るとか0.073%を上回る)可能性も残っていますが、おそらく肌トラブル発生率はこの幅のどこかになるでしょうということです。ってことは10,000人で試験して肌トラブルが4人だったとしても市販後に肌トラブル発生率が0.05%を上回る可能性はあるということになります。信頼区間の上方値が0.05%を切るような実験結果が得られた時に「おそらく(95%の確率で)市販後の肌トラブルが0.05%を超えることはないだろう」と言えます。逆算すると10,000人中肌トラブルが2人(0.02±0.023%)以下というのが合格基準に設定されます(実際の肌トラブルの発生率基準はここで例示した0.05%よりも厳しくとっている会社が多いと思うので、試験条件と合格基準はもっともっと厳しくなります)。

計算ではそうなりますが、市販前に10,000人で使用試験なんてあまりにも非現実的な条件ですね。数をそろえることが現実的でないから、敏感な人を多く集める、塗布回数を増やす、通常は肌トラブルにならない軽微な刺激感もカウントするなどの工夫で試験の質を変えて通常よりも肌トラブルが起きやすい条件で試験することで少ないサンプル数からでも肌トラブルの発生を検知できるようにします。通常よりも肌トラブルが100倍発生しやすい試験条件を組み立ててしまえば10,000人中2人の合格基準は単純思考で100人中2人という合格基準に読み替えることができます(この読み替えが統計学的に妥当性があるかどうかについては、すいません勉強不足で・・・)。その単純思考が正しいとしてもだよ、市場条件より100倍肌トラブルが発生しやすい条件で実験なんて、それはそれで無理だよなあ(ボソっと独り言)。

とにかく、100人程度の使用試験だけで化粧品の安全性を評価するのはヒジョーに難しいということがわかりました。だから、パッチテストや累積刺激試験、コメドテストなどいろんな試験をして複数の観点での評価が必要になるんですね。先生が日頃からアレをやれコレをやれとおっしゃることの重要性がわかりました・・・・先生って誰? 私たち化粧品技術者はより安心で安全な化粧品を世に送り出すために日夜あの手この手を駆使しながら化粧品を作ってるんですよね。統計の勉強もっとしなきゃ・・・。

どこでもWi-FiとGPS-CS3Kで現在位置確認

iPhoneっていいよな、GPS内蔵で。付属のマップアプリmaps20080609(Googleマップ)で簡単に現在位置の確認ができる。ボクのiPod touchも自作の[どこでもWi-Fiセット]でどこでもネット接続できるようになったから地図を見ることはできるようになって検索窓に住所を入力すればだいたいの現在地の地図を表示することはできる。でも外出中に地図を確認したくなる状況って「あれっここどこだ?」 っていうときだから、だいたいの場所がわかるくらいじゃあんまり意味がない。GPSみたいに現在位置をかなりピンポイントで表示できないと・・・・GPS・・・・持ってるじゃん「GPS-CS3」!

GPSロガー「GPS-CS3」と「iPod touch」をつかった現在位置確認方法。GPS-CS3は液晶画面に現在の緯度経度を表示することができます。「35°37’52.23″N 139°44’37.38″E」のようにカナーリ細かい位置まで表示してくれるので、iPod touchのマップアプリにこの情報を入力すればかなり高い精度で現在位置を表示できます。iPod touchのマップアプリはつまるところGoogleマップなので、検索窓にGoogleマップの作法で緯度経度を入力すればいい。書式は「N35 37 52.23 E139 44 37.38」というようにスペース区切り(秒は小数点を忘れずに)入力する。

リアルタイムに現在位置を地図表示するなんてことは無理だけど「ありゃ、ここどこだ?」ってときにどこでもWi-Fiセットの電源を入れてiPod touchにGPS-CS3の緯度経度情報を入力すれば現在位置をかなり正確に把握することができる。それほど荷物にならないからちょっとしたハイキングやサイクリングのお供に持ち歩けば安心。

PHPでPDFファイルのプロパティを取得する(1)

TCPDFというPDF生成ライブラリが便利。比較的簡単にPDFファイルが作れる。ところでサーバに生成したPDFファイルを貯め込んである場合、その一覧表をつくる方法を考えた。最初に思いついたのが、TCPDFでPDFを生成するたびにMySQLに情報をいれて、これを使って一覧表のページをつくること。でも何かのはずみでディレクトリ内のファイルを削除したりリネームしたりしてしまうことがあるかもしれない。そうなると実態とMySQL内の情報がめちゃくちゃになってしまう。一番簡単なのはファイル名を使って一覧表を作ってしまうことだというのはわかる。でもファイル名だと中身がわかりにくい。さてどうしようか。

PDFファイルには「タイトル」「サブタイトル」「著者」「作成日」「更新日」「キーワード」といった情報を記録しておくことができる。

PDFファイルにはタイトルや著者などの情報を記録できる
PDFファイルにはタイトルや著者などの情報を記録できる

TCPDFにもPDFを生成するときにもこれらの情報を付加する関数がある。ということはここにいろいろ書いておいて、phpでこれを読み込んで一覧表をつくることができればディレクトリに実在するPDFファイルを対象にしつつわかりやすい一覧表が簡単につくれる、ハズ。

ハズ、なんだけど、どうすりゃいいんだ? ネットでいろいろ検索するとPDF生成ライブラリとして有名なPDFlibのオプション機能としてPDFプロパティの取得ができる機能があることがわかった。オプション単体でも存在しているんだけど、どっちにしても有料。うーんお金とれる話なら使ってもいいけど、趣味だからなあ。高すぎる。

で、phpユーザーのメーリングリストで質問したら、ZendFrameworkのZEND_Pdfという機能でOKとの回答。そうなのか。フ、フレームワークか。フレームワークって、知識としては知ってるけど未経験。CakePHPあたりの勉強してみようかなぁなんて思ってたくらいだからなあ。できるってことはわかったけど、使えるようになるまでにえらい時間かかりそう。でもいずれフレームワークも使えるようになったときのために覚えておこう。

メーリングリストでもうひとつ興味深い回答が。PDFファイルに記録されている情報なんだから直接取り出しちゃえば?という至極単純な回答。そりゃそうだ。あははは。

とりあえずバイナリエディタ「0xED」を使ってサイズの小さなPDFファイルを開いてみる。だらだらだら〜っと眺めていると、あった、あった。「/Title」っていう部分、ほかにも /Author、/Subject、/Keyword、/Creatorなどなど。それぞれ直後にある( )内がプロパティ値になっているらしい。( )内をいろんなエンコーディングで試してみたらUTF-16でバッチリ変換できる。

PDF形式のファイルをバイナリエディタでひらくと
PDF形式のファイルをバイナリエディタでひらくと

ここまでわかったらあと一歩。phpでPDFファイルをバイナリで開いて、「/Title (」ってのを探して、終わりの「)」を見つける。その間にあるバイナリデータはUTF-16なんだからこれをUTF-8に変換すればブラウザで表示できる。