# Anpheros 症状エンジン：方法論

> どのような言語の自由記述の症状も、WHO ICD-10 および ICD-11 の概念に変換される仕組み：AI 正規化、存在と経験者の検出、WHO 検定済み語彙、評価結果、類似症例マッチング、および限界。

Source: https://developers.anpheros.com/ja/guides/symptom-engine

**Anpheros 症状エンジンは、人が自身の言葉と言語でどのように感じているかを記述した内容を、国際的な臨床概念に変換します。具体的には、安定した Anpheros ID、WHO ICD-10 コード、WHO ICD-11 コード、および身体システムを生成し、さらに症状が存在するか、解決済みか、仮説的か、あるいは他者に関するものかを特定します。これは Anpheros Daily の背後で本番稼働しており、その結果を Anpheros Platform 上で HL7 FHIR R4 Observations として公開し、REST および FHIR API を通じてあらゆるアプリケーションに同じ用語を提供します。** このページでは、その仕組み、検証方法、測定内容、および限界について説明します。

## 概要

| | |
|---|---|
| コンセプト | 274件（197件の症状、77件の所見）、識別子 `SYM-0001`…、再利用不可 |
| 分類体系 | WHO ICD-10（バージョン2019）およびWHO ICD-11 MMS（2025-01）、各マッピングの同等性あり |
| 身体系 | 13個、ICD-11の第21章ブロック（神経系、消化器系、呼吸器系、皮膚など）から採用 |
| 言語 | 20言語での名称、個人の言語での自由記述 |
| 警告サイン | 32件、14のコンセプトに対して、CDCおよびNIDDKからの逐語引用 |
| 正規化器評価 | 5言語（ルーマニア語、英語、スペイン語、ドイツ語、フランス語）：プライマリコード 97.5–100 %、存在と対象 92.5–98 %、否定された症状は全言語で0 %として報告 |
| 臨床レビュー | まだなし：全レスポンスに対して `clinical_review: false` |
| 標準規格 | HL7 FHIR R4（`CodeSystem`、`ValueSet`、`ConceptMap`、`Observation`）、ICD-10、ICD-11、検査結果用のLOINC |

## 1. パイプライン

症状は4つのステップを経ます。本人のテキストは変更されず、各ステップでその横にデータが追加されます。

1.  **キャプチャ (Capture)。** 生の入力は、記録された瞬間、電話のタイムゾーン、言語、そしてオプションで強度（1～10）、発症時期、終了時期とともに、そのまま保存されます。下流のどの処理もこれを書き換えることはありません。
2.  **正規化 (Normalization) (AI)。** 大規模言語モデル（Vertex AI 上の Google Gemini）がテキストを読み取り、言及されている各症状について、プライマリ ICD-10 コード、オプションのセカンダリ コード、短いラベル、そして *assertion*（present, absent, resolved, hypothetical, uncertain）と *subject*（本人、または他の誰か）の2つの属性を返します。モデルは Anpheros ボキャブラリからのみコードを選択できます。それ以外の回答、エントリの省略、または無効なプライマリ コードは、失敗した試みとしてカウントされ、「不明な症状」としてはカウントされません。
3.  **コンセプトマッピング (Concept mapping) (決定論的)。** ICD-10 コードは Anpheros コンセプトにマッピングされ、そこから ICD-11 および身体システムにマッピングされます。このステップでは AI ではなく固定テーブルを使用するため、同じコードは常に同じコンセプトを与えます。
4.  **公開 (Publication)。** **present** であり、かつ **本人に関する** 症状のみが、正規化に成功した後、本人のレコード内の FHIR Observation となります。後続の編集や再正規化によってこれが変更された場合、Observation は取り下げられます。バージョン履歴は保持されます。

## 2. 存在、時間、および経験者

臨床テキストでは、患者が持っていない症状がしばしば言及されます。臨床自然言語処理では、これを*否定*、*時間性*、および*経験者*の検出（NegExおよびConTextファミリーの方法）と呼びます。エンジンは、モデルのアサーションおよびサブジェクト属性を使用して、同じ3つの質問を処理します。

| 記述 | アサーション / サブジェクト | 患者の症状として公開されますか？ |
|---|---|---|
| "I've had a headache since Tuesday" | present / self | yes |
| "my head doesn't hurt any more" | resolved / self | no |
| "I might get a fever tomorrow" | hypothetical / self | no |
| "my mother has a cough" | present / other | no |

親族の訴えが自動的に家族歴に変換されることはありません。

## 3. 語彙とその検証方法

この語彙は、ICD-10 第18章（R00–R94、およびリリース 2026.10.3 以降の R06.0 呼吸困難などの非残余サブカテゴリ）と、WHO が症状を別の章に分類している場合はその WHO コード（便秘 K59.0、耳鳴り H93.1、複視 H53.2、かすみ目 H53.8、かゆみ L29.9、関節痛 M25.5、腰痛 M54、睡眠障害 G47）をカバーしています。

- **ICD-10。** 各コードと英語のタイトルは、WHO ICD-10 Version 2019 ブラウザに対して、各コードの包含および除外ノートを含めて検証されました。ノートによって症状が別の場所に移動された場合（例: R19.4 は便秘を除外）、語彙は WHO に従いました。
- **ICD-11。** 各コンセプトは、WHO Simple Tabulation から取得された ICD-11 MMS 2025-01 コードにマッピングされ、公式の WHO ICD-10 → ICD-11 マッピングテーブルと比較されました。エンジンは、疾患コード（頭痛 → MB4D、8A8Z「頭痛障害」ではない）ではなく、第21章の*症状*コードを使用します。WHO 統計テーブルからの21の逸脱はそれぞれ、リリースファイルに理由とともにリストされています。67のマッピングは同等であり、残りはより広い、より狭い、または不正確としてマークされています。
- **文書化された選択。** 個人によって記述された「偏頭痛」は頭痛（R51）としてコード化され、特定されていない下痢は R19 としてコード化されます。これは、代替の WHO コード（G43、A09）が診断であるためです。エンジンは診断ではなく、報告された症状を記録します。
- **翻訳。** 英語名は WHO のタイトルです。18の追加言語の名前は機械翻訳であり、WHO のタイトルに対して用語ごとにレビューされました（`review: ai_reviewed`）。5つの言語では、コードの意味と一致しないため、すべての言語で書き直されました。専門の医療翻訳者によるレビューはまだ行われていません。
- **警告サイン。** CDC（脳卒中、心臓発作）および NIDDK（下痢、便秘）のパブリックドメインページから、逐語的に引用されており、言い換えられていません。各引用には、ソース、ライセンス、および診断ではないという注記が付いています。引用に 9-1-1 と記載されている場合、注記にはヨーロッパの 112 が追加されます。

## 4. 評価

正規化器は、ルーマニア語（現在のユーザーのほとんどが使用する言語）で記述された100の合成ケースの固定セットで評価されます。各ケースには、期待されるプライマリコード、アサーション、およびサブジェクトが含まれています。32のケースは意図的に存在しないものとしてマークされています（否定、解決済み、仮説、不確実、または他者に関するもの）。現在のプロンプト（バージョン3、2026年10月15日）での結果は以下の通りです。

| メトリック | 結果 | 目標 |
|---|---|---|
| プライマリコードの正しさ | 100 % | ≥ 85 % |
| アサーションとサブジェクトの両方が正しい | 98 % | — |
| 否定された症状が存在として報告された | 0 % | ≤ 3 % |

2つのエラーは管理上のエントリ（「火曜日の心臓専門医の予約」、「5kg痩せたい」）であり、存在するものとしてではなく仮説として分類されました。どちらも症状ではありません。テストセットは臨床医によってレビューされていないため、スコアは参考値です。

**その他の言語（2026年10月16日）。** 40のケース（すべてのカテゴリを網羅）が英語、スペイン語、ドイツ語、フランス語に翻訳され、期待される回答は同じです。非公式なケースは、各言語の独自の非公式スタイルで書き直されました。モデルへの指示は同じままです。

| 言語 | ケース数 | プライマリコード | 存在とサブジェクト | 否定されたものが存在として報告された |
|---|---|---|---|---|
| ルーマニア語 | 100 | 100 % | 98 % | 0 % |
| 英語 | 40 | 100 % | 97.5 % | 0 % |
| スペイン語 | 40 | 97.5 % | 92.5 % | 0 % |
| ドイツ語 | 40 | 100 % | 97.5 % | 0 % |
| フランス語 | 40 | 100 % | 95 % | 0 % |

残りのエラーのほとんどは、同じ管理上のエントリ（「火曜日の心臓専門医の予約」、「健康診断、すべて問題なし」）または、存在しない2つの状態間の選択（「今日は熱がない」を不在ではなく解決済みとして）です。これらのいずれも症状を公開していません。唯一のコーディングの違いは、スペイン語の「escalofríos y malestar」（悪寒と倦怠感）が、悪寒（R68）を二次コードとして、倦怠感（R53）としてコーディングされたことです。

人々に表示される名前は言語に従います。アプリは、ユーザーの言語（まず一般名）で概念名を表示し、アプリの20言語で存在に関する注記（「解決済み」、「他人」）を表示します。

**本番環境（2026年10月16日）**、WHOに対して語彙がチェックされた後、保存されているすべての症状が再正規化されました。実際のユーザーの記録では、すべての症状が正規化され、「不明」として残された症状は0件、その人のものではない症状がその人のものとして公開されたものは0件でした（公開されたObservationsの独立監査）。

## 5. 類似症例（開発中）

次のコンポーネントは、症状と異常な検査結果に基づいて人々を比較し、明示的な同意がある場合にのみ、非常に類似した報告をしている人々を提案します。

- **プロフィール。** Anpheros コンセプトによる過去 90 日間の自己申告された症状、および検査機関によって印刷された基準範囲外の過去 180 日間の検査結果（LOINC コード別）。プロフィールは言語や国に依存しません。ルーマニア語の検査レポートと英語の検査レポートは、同じ LOINC コードにマッピングされます。
- **スコア。** 重み付けされたジャッカード指数：両者の共有された兆候 / 両者の全兆候。非常に一般的な症状（頭痛、腹痛、疲労、発熱、咳、めまいなど）は 0.25、特定の症状は 1、異常な検査結果は 1.5 の重み付けがされます。50 人の参加者からは、人口における兆候の希少性（逆文書頻度）によって重みもスケーリングされます。同じ身体システム内の 2 つの異なる兆候は、部分的なクレジットを獲得します。
- **ルール。** 少なくとも 3 つの共有された特定の症状、または 2 つの共有された特定の症状と 1 つの共有された異常な検査結果がある場合にのみ、ペアが考慮されます。一般的な訴えだけでは、2 人が「類似している」とは見なされません。スコア 0.70 から招待が提供され、スコア 0.80 から類似症例が表示されます。
- **プライバシー。** 成人のアカウント保有者のみ、明示的な同意（GDPR 第 9 条）、いつでも取り消し可能で即時削除されます。個人はカウントと共有された兆候のみを確認でき、他者が誰であるかは決して確認できません。

これは診断や疾患を提案するものではありません。

## 6. アプリケーションでの利用方法

- **Anpheros Daily** (iOS, Android, Mac, web): ユーザーが記録したすべての症状は上記のパイプラインを通過し、ユーザーは結果を確認・修正できます。
- **Anpheros Platform**: 症状は、カテゴリ `urn:anpheros:observation-category|symptom` を持つ FHIR `Observation` として保存されます。カテゴリにはコードとユーザー自身のテキストの両方が含まれます。ユーザーの同意を得たあらゆるアプリケーションがこれらの情報を読み取ることができます。
- **お客様のアプリケーション**: `GET /v1/terminology/symptoms` を使用して概念を検索し、FHIR `ValueSet` を展開し、`ConceptMap` を使用してコードを ICD-10 および ICD-11 に翻訳し、`anpheros-symptom` プロファイルに対して Observation を検証します。リクエストとレスポンスについては、[Symptom data API](https://developers.anpheros.com/ja/guides/symptom-data-api) を参照してください。
- **AI アシスタントおよびエージェント**: フリーテキストではなく [Context API](https://developers.anpheros.com/ja/guides/ai-agents-medical-data) を介して同じ構造化データを読み取るため、回答でコードを引用できます。

## 7. 制限事項

- エンジンは症状を名前とコードで示しますが、診断、原因のランク付け、または症状と疾患の関連付けは行いません。
- 現在、臨床医による語彙、翻訳、または警告サインのレビューは行われていません。
- 評価セットは合成データです。20言語中15言語には、まだ評価セットがありません。
- ICD-11はWHOによってCC BY-ND 3.0 IGOの下でライセンスされており、コードとタイトルは変更されずに再現されています。

## 関連情報

- [Symptom data API](https://developers.anpheros.com/ja/guides/symptom-data-api): コンセプト、FHIR 用語、患者報告の症状
- [Anpheros Search](https://developers.anpheros.com/ja/guides/anpheros-search): 条件と治療法とともに同じ症状を 1 つの公開カタログで検索。各エントリにはソースが含まれます。
- [FHIR コードシステム](https://developers.anpheros.com/ja/guides/fhir-code-systems)
- [Longitudinal patient data API](https://developers.anpheros.com/ja/guides/longitudinal-patient-data-api)
