2021年4月3日土曜日

PCR 検査の FNR

年度末、体調を崩し気味になる方が周りで増えていました。

3月、私も喉を少し痛めました。ほぼ毎年かかる扁桃が少し腫れた状態です。軽い風邪なのかPM2.5なのか、花粉症なのか。発熱はありません。コロナに該当するといわれる症状が喉以外に見あたりません。が、万が一の場合のリスク(周りの方々への御迷惑云々)を考え、仕事帰りにPCR検査を受けました。

規模の大きな病院だったためか非接触が徹底されています。web問診、web診断でPCR受検が決まり、キットに唾液を入れて、最後にアクリル越しの対面診断という流れでした。医師、看護師の安全を最優先という方針がよく伝わりました。たった1年で全国にこのような仕組みが作られていることに感心。各自治体がもっと住民にアピールした方が良いと思います。HPだけだと詳細がわからないですからね。動画なりTV番組なりで周知すべきです(私が知らなかっただけかもしれませんが)。

今回、受診する際に知ったのですが、PCR検査は医師でなくても取り扱い可能なようです。医療とは無関係な民間事業者もサービスとして多く参入しています。低価格を売りにしている事業者も見かけました。
急に事業者が増え、安い検査が出てくると、受ける側としては精度の担保が気になりますね。ま、情報がないので、診断を提供する医療と安心を提供するサービスといった、2種類の別の検査があると思っていた方が良いのかもしれません。どちらも需要はありますので、使い分ければ良いのでしょう。テレワークを導入できない企業のリスク管理、BCPとしての需要は大きなはずです。従業員全員が定期的に安価な民間検査を受ける、風邪の初期症状のようなものがあれば随時医療機関で検査を受ける、というのがそういった企業での一管理手法でしょうか。

結果は翌日に判明。慎ましく生活していたためか、予想通り陰性でした。が、FNR(偽陰性率)について気になったので調べてみました。

2020/8/18
日本疫学会
https://jeaweb.jp/covid/qa/index.html
https://www.acpjournals.org/doi/10.7326/M20-1495

PCR検査の感度は?についての結論ですが、PCR検査の感度については、PCR検査自体以外の要因の影響が大きいこともあり、一概に感度は何パーセントであると言い切れないのが実情です。
あえて、Kucirkaらの結果から感度を示すとすると、感染から8日目(症状発現の3日後)に偽陰性割合が最も低くなり、その値が、20% (95%信頼区間:12% ― 30%)となることから、感度として一番よい値になるのが、感染から8日目(症状発現の3日後)の80%(95%信頼区間:70%-88%)となります。
2020/9/28
北海道大学
https://www.huhp.hokudai.ac.jp/wp-content/uploads/2020/09/release_20200928.pdf
https://academic.oup.com/cid/advance-article/doi/10.1093/cid/ciaa1388/5911780
陽性者は唾液 48 例、鼻咽頭ぬぐい液 46 例であり、それぞれの感度は 83-97%対 77-93%、特異度は両者ともに 99.9%以上でした。

評価するには陽性数が少ないと思われますが、昨年9月時点の値としてはFNR=約1~2割のようですね。うーん、スクリーニングなのでもう少し拾っているのかと思っていましたが、そうでもないようです。他に良い手法がないのでしょうね。というか、被検者の感染からの日数が見かけ上の値を左右しているようなので、検査手法自体の評価はできないのでしょう。
そのうち、データが覆されるということは十分に考えられますし、改良されたり良い手法がデフォになるかもしれません。そう思うと、今一番良い選択肢はリモートなんですよね(私の勤め先では、陰性で出社という決まりで選択できませんが)。

後日、周りの体調を崩されている方に受検を勧めたら「いや、受けないよ!」となぜか拒否反応でした。普段、防災に携わっている方々でも、バイアスを取り除くのは難しいようです。

***************************
20210404追記

医師曰く、今年はインフルエンザ患者が非常に少なかったようです。それに対し、コロナ患者さんが一定数出ていますので、感染力は後者の方が相対的に高いといえるようです。

 

Rain detection

写真や動画からゴミを抜いたり、機械学習で補正したりといった話は、よく聞きます。

動画で雨の影響を取り除くことについて機械学習分野では目にしていましたが、これ、昔から様々な手法が考案されてきたようです。
今日、良いレビューを見かけましたので、そこから読み始めた資料を書き留めておきます(まだまだあると思います)。

・レビュー
A Survey on Rain Removal from Video and Single Image
・Time Domain
・Frequency Domain
・Low Rank and Sparsity
・Deep Learning
https://arxiv.org/pdf/1909.08326.pdf

https://github.com/hongwang01/Video-and-Single-Image-Deraining 

レビューではオンタイムでの判定が念頭に置かれています。
周波数領域ではエラーの出るケースが紹介されています。
手法の比較では、Low Rank and Sparsity が優秀でした。なんでしょう、これ。スパース性と検出が結びつきません。読んでみましょうか。

・自動車の自動運転では雨滴の検出も重要
On the Impact of Varying Region Proposal Strategies for Raindrop Detection and Classification using Convolutional Neural Networks
https://breckon.org/toby/publications/papers/guo18raindrop.pdf
https://github.com/tobybreckon/raindrop-detection-cnn 

近年ではレーンキープをはじめ自動運転など、雨の映像への影響は考慮済みであり、実用化されています。自動車業界では死活問題ですから進んでいるのでしょう。

・ヒストグラム利用
Rain or Snow Detection in Image Sequences through use of a Histogram of Orientation of Streaks
http://perso.lcpc.fr/tarel.jean-philippe/publis/jpt-ijcv11.pdf 

 レビューの中でもヒストグラムの利用は紹介されています。時間領域やピクセル検出を前処理と考えると、コチラが本命という扱いになるのでしょう。組み合わせ自由ですね。

・Detection and removal of rain from videos
Algorithm for Detection and Removal of Rain from Videos
(a)前後フレームの輝度の変化を使用して、雨の影響を受けるピクセルを特定。雨のピクセルを白で表示。いくつかの誤検知(非雨ピクセル)あり。
(b)輝度に制約式を適用し、誤検知を削減。
(c)線状ピクセル(streak)を検出。
(d)Rを3×3メッシュで30フレーム加算。明るいピクセルは強い相関関係=雨ピクセルを表し、雨以外のピクセルは強度値が低くなる。
https://www.cs.columbia.edu/CAVE/projects/rain_detection/ 

レビューによれば、Video Deraining Methods の中で最も古い手法といえます。比較対象になっていましたが、残念ながら良い結果とは言えませんでした。
streakという単語は頻繁に出てきます。computer vision の分野ではデフォなのでしょう。

番外編:ハードウェアで解決
車のレインセンサーを付けた方が安価では?
How detect rain on camera vision using OpenCV in C++
https://stackoverflow.com/questions/44430881/how-detect-rain-on-camera-vision-using-opencv-in-c

As for the rain, I guess there's no simple answer that can be given in a few sentences. There are some articles available in the web though. That said, I would guess it would be simpler and cheaper to detect rain by just installing external rain sensors (like the ones activating wipers in a car) rather than trying to do it by developing your own computer vision algorithm for that purpose.

2021年4月1日木曜日

地震波とAIC

 地震波のPS判定にAICが使われている例があると聞きました。

どうやるのだろう?と不思議に思っていたのですが、どうやらスパースモデリングのように変数を絞り込む使い方ではなかったようです。見つかったのがコチラ。

地震波自動処理システムにおける読み取りおよび評価
Automatic Event Identification From Tectonic Earthquakes with Modified Akaike Information Criterion (mAIC)

このような使い方であれば、今ならCVでしょうか。AIC自体は数学的ですが、分析対象に合うか合わないかは別ですので。
以下の文献では、低い部類に入っていますが、実際はどうなのでしょう?

Earthquake transformer—an attentive deep-learning model for simultaneous earthquake detection and phase picking

いずれにしても、波動論などの理屈で決定という方向は難しいようで、それっぽいところを抽出するのに精度が高かった手法を使っているという状況。コンペにかけてプロが続々参入すると、簡単に精度が上がるような気がします。

 

2021年3月28日日曜日

persistent diagram

https://github.com/scikit-tda/scikit-tda
Scikit-TDA is a home for Topological Data Analysis Python libraries intended for non-topologists.
はい。私のような non-topologist でも persistent diagram を簡単に作ることができました。
Mapper よりも Topology って感じです。

https://github.com/GUDHI/
The GUDHI library is a generic open source C++ library, with a Python interface, for Topological Data Analysis (TDA).
Tutorial がたくさん。こちらは触っていませんが、バーコードもかけるようですね。機能豊富です。

persistent diagram ではデータセットで対比するので、個々のデータをあてはめて予測、という使い方ができません。高次元のデータや図の比較、時系列データなどが対象になるのでしょうか。 

時系列データへの適用例です。
https://arxiv.org/abs/1803.00208 

これなら機械学習と同じ枠組みが使えます。動画での異常検知にもきっちりハマりますね。既存の手法と比較し良い方を選択するか、両方使うかでしょう。今後の動向に注目です。

 

2021年3月27日土曜日

KeplerMapper 2.0,0

Kepler Mapper を試行。
https://github.com/scikit-tda/kepler-mapper

example を動かしたのですが、そのままでは Version 違いで動きませんでした。最新版の API reference を参照し、修正したら動きました。ついでに mapper.visualize で html に。

図はできました。が、思っていたほど topology が主体ではないですね。コードを見る限り、UMAP で次元を圧縮してから DBSCAN でクラスターを作成してます。これだと機械学習分野の前処理と変わらないのですが、その後、クラスター間の線をつないで図ができています。つなぐぐか、つながないかの判断が topology なんでしょうね。

感覚的には分かったので、説明を検索。
Mapper の説明。3人目の方が話されています。
https://aip.riken.jp/video/aip-open-seminar-2/?lang=ja

Mapper
・ Extract the "shape" of complicated data.
・ Local clustering + global information
・ Generalization/"discretization" of Reeb graph.
・ Tool for exploratory (topological) data analysis.

0. prepare the data
1. Choose filter function
2. Partition (with overlap) using filter and cover
3. Perform Clustering in each partiton
4. Create Mapper graph
 Each cluster is represented by a vertex.
 Draw an edge if there's a non-empty interaction between two clusters.

上の例では UMAP が filter function に該当するのでしょう。動画ではPCAが紹介されています。

Reeb graph って何だろう、と探してみたら、良い動画がありました。比較により、Mapper の特徴がよくわかります。
https://www.youtube.com/watch?v=_tiv0qYcM3U

この動画の冒頭で紹介されている文献は Kepler-mapper でも参照されています。よくわからない部分が多いのですが、動画の解説部分は理解できましたので必要に迫られるまで寝かしておきましょう。

***********************************************************
202010827追記
実際のデータ(10,000,000*3)を入れたら、MemoryError。クラスタリングに sklearn を使っているからでしょう。実務での利用は難しいかな。

2021年3月9日火曜日

概念モデルの不確実性

「地下水モデル―実践的シミュレーションの基礎― 第2版」より

2.4 概念モデルの不確実性
・全ての概念モデルは定性的で不確かなものである。(すべての複雑性を表現できない)

・その不確実性に対して2つのアプローチがある
1.新しい情報を入手した時に、概念モデルを更新・訂正する。(進化する仮説)
2.概念モデルの代替え案を作成する。(複数作業仮説)

・好ましいモデルはモデリング過程で更新・改定されたもの。
・好ましいモデルが十分にキャリブレーションされ、不確実性解析で良い結果を与えると判断されて最終的に使用する概念モデルとして生き残る。

・実際には、プロジェクトの予算とモデリングの目的によって、アプローチにどれだけの労力を割けるかが決まる。


エンジニア

複数のエンジニアと話をする機会がありました。

感動しますね。プロは想像以上に理解が早い。私が1週間かけて理解した数式やコードを、2、3日で完全に読破されています。問題点やそのレベルの評価も一致。このような人材が揃っている会社って、素晴らしいの一言です。
話していると知らなかった知見があふれてくるようで、それも面白い。一緒に仕事をしてみたいなと思わせる方々でした。

私も、お客様にそのように思っていただいたことはあるのでしょうか?自信がないですね。
仕事内容の変化に伴い話す機会は減りましたが、できることを続けておきましょう。