{
"cells": [
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"# 04 — Visualisation\n",
"\n",
"Build the charts and network graphs shown in the Streamlit dashboard.\n",
"\n",
"**What this notebook covers**\n",
"- Entity frequency charts\n",
"- Co-occurrence network (NetworkX + pyvis)\n",
"- ICD-10 heatmap\n",
"- Severity breakdown by specialty"
]
},
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"## 1. Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Setup OK\n"
]
}
],
"source": [
"import sys\n",
"sys.path.insert(0, '..')\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"import pandas as pd\n",
"import plotly.express as px\n",
"import plotly.graph_objects as go\n",
"\n",
"from src.nlp.ner import build_ner_pipeline\n",
"from src.nlp.cooccurrence import build_cooccurrence_graph, graph_summary\n",
"from src.utils.text_utils import clean_clinical_text\n",
"from src.etl.extract import load_mtsamples\n",
"from src.etl.transform import prepare_for_training\n",
"\n",
"print('Setup OK')"
]
},
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"## 2. Build Entity Dataset\n",
"\n",
"Run NER on 300 notes to build a representative entity corpus."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2026-06-25 23:00:40 | INFO | src.etl.extract | Loading MTSamples from C:\\Users\\Hp\\Documents\\clinical-nlp-pipeline\\data\\raw\\mtsamples.csv\n",
"2026-06-25 23:00:41 | INFO | src.etl.extract | MTSamples loaded: 4999 notes, 40 specialties\n",
"2026-06-25 23:00:41 | INFO | src.etl.transform | Running full transformation pipeline...\n",
"2026-06-25 23:00:41 | INFO | src.etl.transform | Dropped 33 rows with missing transcription text\n",
"2026-06-25 23:00:59 | INFO | src.etl.transform | Removed 2609 duplicate notes\n",
"2026-06-25 23:00:59 | INFO | src.etl.transform | Clean notes: 2357 rows remaining\n",
"2026-06-25 23:00:59 | INFO | src.etl.transform | Filtered 33 notes shorter than 30 words\n",
"2026-06-25 23:00:59 | INFO | src.etl.transform | Deriving severity labels via weak supervision...\n",
"2026-06-25 23:01:05 | INFO | src.etl.transform | urgent 1053 (45.3%)\n",
"2026-06-25 23:01:05 | INFO | src.etl.transform | routine 920 (39.6%)\n",
"2026-06-25 23:01:05 | INFO | src.etl.transform | critical 351 (15.1%)\n",
"2026-06-25 23:01:05 | INFO | src.etl.transform | Transformation complete: 2324 notes ready for training\n",
"2026-06-25 23:01:12 | INFO | src.nlp.ner | Loading NER model: en_ner_bc5cdr_md\n",
"2026-06-25 23:01:26 | INFO | src.nlp.ner | NER model loaded ✓\n",
"2026-06-25 23:01:26 | INFO | src.nlp.ner | Loading NER model: en_core_sci_lg\n",
"2026-06-25 23:01:45 | INFO | src.nlp.ner | NER model loaded ✓\n",
"Notes processed : 300\n",
"Total entities : 33180\n"
]
}
],
"source": [
"ner = build_ner_pipeline()\n",
"df = prepare_for_training(load_mtsamples())\n",
"\n",
"sample = df.head(300)\n",
"note_entities = {}\n",
"\n",
"for idx, row in sample.iterrows():\n",
" ents = ner.extract(row['transcription'])\n",
" if ents:\n",
" note_entities[idx] = ents\n",
"\n",
"total = sum(len(v) for v in note_entities.values())\n",
"print(f'Notes processed : {len(note_entities)}')\n",
"print(f'Total entities : {total}')"
]
},
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"## 3. Entity Frequency Chart"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "code",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"hovertemplate": "Frequency=%{x}
=%{y}",
"legendgroup": "",
"marker": {
"color": "#636efa",
"pattern": {
"shape": ""
}
},
"name": "",
"orientation": "h",
"showlegend": false,
"textposition": "auto",
"type": "bar",
"x": {
"bdata": "S0E3EhEQEA8ODQ0MCwoJ",
"dtype": "i1"
},
"xaxis": "x",
"y": [
"hernia",
"tumor",
"infection",
"chordee",
"hypospadias",
"dvt",
"hydrocele",
"hypertension",
"myocardial infarction",
"glaucoma",
"abscess",
"spermatocele",
"adenocarcinoma",
"torsion",
"cancer"
],
"yaxis": "y"
}
],
"layout": {
"barmode": "relative",
"height": 420,
"legend": {
"tracegroupgap": 0
},
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Top 15 DISEASE entities"
},
"xaxis": {
"anchor": "y",
"domain": [
0,
1
],
"title": {
"text": "Frequency"
}
},
"yaxis": {
"anchor": "x",
"autorange": "reversed",
"domain": [
0,
1
],
"title": {
"text": ""
}
}
}
}
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from collections import Counter\n",
"\n",
"all_ents = [e for ents in note_entities.values() for e in ents]\n",
"by_label = {}\n",
"for label in ['DISEASE', 'MEDICATION', 'PROCEDURE', 'SYMPTOM']:\n",
" texts = [e.text.lower() for e in all_ents if e.label == label]\n",
" top15 = Counter(texts).most_common(15)\n",
" by_label[label] = top15\n",
"\n",
"label = 'DISEASE'\n",
"top = by_label[label]\n",
"fig = px.bar(\n",
" x=[c for _, c in top],\n",
" y=[t for t, _ in top],\n",
" orientation='h',\n",
" title=f'Top 15 {label} entities',\n",
" labels={'x': 'Frequency', 'y': ''},\n",
" height=420,\n",
")\n",
"fig.update_layout(yaxis={'autorange': 'reversed'})\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"## 4. Co-occurrence Network"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2026-06-25 23:03:25 | INFO | src.nlp.cooccurrence | Co-occurrence graph: 500 nodes, 30 edges (min_count=3)\n",
"2026-06-25 23:03:25 | INFO | src.nlp.cooccurrence | Graph pruned to 40 nodes (max_nodes=40)\n",
"Nodes : 40\n",
"Edges : 30\n",
"Density : 0.0385\n",
"\n",
"Top entities by connections:\n",
" infection 10 connections\n",
" hypertension 8 connections\n",
" hernia 4 connections\n",
" tumor 4 connections\n",
" asthma 4 connections\n",
" dvt 3 connections\n",
" myocardial infarction 3 connections\n",
" gastroesophageal reflux disease 2 connections\n"
]
}
],
"source": [
"graph = build_cooccurrence_graph(\n",
" note_entities = note_entities,\n",
" entity_label = 'DISEASE',\n",
" min_count = 3,\n",
" max_nodes = 40,\n",
")\n",
"\n",
"summary = graph_summary(graph)\n",
"print(f'Nodes : {summary[\"nodes\"]}')\n",
"print(f'Edges : {summary[\"edges\"]}')\n",
"print(f'Density : {summary[\"density\"]}')\n",
"print(f'\\nTop entities by connections:')\n",
"for name, deg in summary['top_entities'][:8]:\n",
" print(f' {name:<30} {deg} connections')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Interactive graph saved to ../data/processed/cooccurrence_graph.html\n"
]
}
],
"source": [
"# Interactive pyvis network (saved as HTML, open in browser)\n",
"from src.nlp.cooccurrence import graph_to_pyvis\n",
"\n",
"html = graph_to_pyvis(graph)\n",
"if html:\n",
" out_path = '../data/processed/cooccurrence_graph.html'\n",
" with open(out_path, 'w') as fh:\n",
" fh.write(html)\n",
" print(f'Interactive graph saved to {out_path}')\n",
"else:\n",
" print('pyvis not installed — run: pip install pyvis')"
]
},
{
"cell_type": "markdown",
"id": "de3e7bb5",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "md",
"metadata": {},
"source": [
"## 5. Severity by Specialty"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "code",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"alignmentgroup": "True",
"bingroup": "x",
"hovertemplate": "severity=routine
specialty_clean=%{x}
count=%{y}",
"legendgroup": "routine",
"marker": {
"color": "#2ecc71",
"pattern": {
"shape": ""
}
},
"name": "routine",
"offsetgroup": "routine",
"orientation": "v",
"showlegend": true,
"type": "histogram",
"x": [
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Surgery",
"Urology",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Hematology - Oncology",
"Hematology - Oncology",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary"
],
"xaxis": "x",
"yaxis": "y"
},
{
"alignmentgroup": "True",
"bingroup": "x",
"hovertemplate": "severity=urgent
specialty_clean=%{x}
count=%{y}",
"legendgroup": "urgent",
"marker": {
"color": "#f39c12",
"pattern": {
"shape": ""
}
},
"name": "urgent",
"offsetgroup": "urgent",
"orientation": "v",
"showlegend": true,
"type": "histogram",
"x": [
"Neurology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Pain Management",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary"
],
"xaxis": "x",
"yaxis": "y"
},
{
"alignmentgroup": "True",
"bingroup": "x",
"hovertemplate": "severity=critical
specialty_clean=%{x}
count=%{y}",
"legendgroup": "critical",
"marker": {
"color": "#e74c3c",
"pattern": {
"shape": ""
}
},
"name": "critical",
"offsetgroup": "critical",
"orientation": "v",
"showlegend": true,
"type": "histogram",
"x": [
"Cardiovascular / Pulmonary",
"General Medicine",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Urology",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Surgery",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Radiology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Psychiatry / Psychology",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pediatrics - Neonatal",
"Pain Management",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Orthopedic",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Neurology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"Hematology - Oncology",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"General Medicine",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Gastroenterology",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary",
"Cardiovascular / Pulmonary"
],
"xaxis": "x",
"yaxis": "y"
}
],
"layout": {
"barmode": "group",
"height": 420,
"legend": {
"title": {
"text": "severity"
},
"tracegroupgap": 0
},
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Severity distribution by specialty (top 12, clinical specialties only)"
},
"xaxis": {
"anchor": "y",
"categoryarray": [
"Surgery",
"Radiology",
"General Medicine",
"Urology",
"Neurology",
"Pediatrics - Neonatal",
"Orthopedic",
"Psychiatry / Psychology",
"Pain Management",
"Hematology - Oncology",
"Gastroenterology",
"Cardiovascular / Pulmonary"
],
"categoryorder": "array",
"domain": [
0,
1
],
"tickangle": -30,
"title": {
"text": "specialty_clean"
}
},
"yaxis": {
"anchor": "x",
"domain": [
0,
1
],
"title": {
"text": "count"
}
}
}
}
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Exclude document-type / administrative categories that are not genuine\n",
"# clinical specialties (MTSamples mixes these into the same\n",
"# specialty field, e.g. Soap / Chart / Progress Notes can come from\n",
"# any clinical domain, so comparing severity across them mixes\n",
"# note-type with clinical-domain rather than comparing specialties).\n",
"_NON_SPECIALTY_CATEGORIES = {\n",
" 'Soap / Chart / Progress Notes',\n",
" 'Consult - History And Phy.',\n",
" 'Office Notes',\n",
" 'Discharge Summary',\n",
" 'Letters',\n",
" 'Ime-Qme-Work Comp Etc.',\n",
"}\n",
"specialty_df = df[~df['specialty_clean'].isin(_NON_SPECIALTY_CATEGORIES)]\n",
"\n",
"# Filter to the actual top 12 by note count -- categoryarray alone only\n",
"# controls display ORDER, it does not exclude unlisted categories, so\n",
"# without this filter every remaining specialty still gets plotted.\n",
"top12 = specialty_df['specialty_clean'].value_counts().head(12).index.tolist()\n",
"specialty_df_top12 = specialty_df[specialty_df['specialty_clean'].isin(top12)]\n",
"\n",
"fig = px.histogram(\n",
" specialty_df_top12,\n",
" x = 'specialty_clean',\n",
" color = 'severity',\n",
" barmode = 'group',\n",
" title = 'Severity distribution by specialty (top 12, clinical specialties only)',\n",
" category_orders = {\n",
" 'specialty_clean': top12,\n",
" 'severity': ['routine', 'urgent', 'critical'],\n",
" },\n",
" color_discrete_map = {\n",
" 'routine': '#2ecc71',\n",
" 'urgent': '#f39c12',\n",
" 'critical': '#e74c3c',\n",
" },\n",
" height = 420,\n",
")\n",
"fig.update_layout(xaxis = dict(tickangle=-30))\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"id": "known-limitations",
"metadata": {},
"source": [
"## 6. Known Limitations\n",
"\n",
"This pipeline was hardened through extensive iterative bug-fixing. The remaining\n",
"known gaps are documented here rather than hidden, so the system's\n",
"actual failure modes are visible to anyone evaluating it.\n",
"\n",
"### NER / entity classification\n",
"\n",
"- **SYMPTOM precision is structurally weak (~12% on a hand-reviewed\n",
" sample, see notebook 01 section 6).** SYMPTOM is the default bucket\n",
" for any `en_core_sci_lg` entity span that doesn't match a more\n",
" specific rule. It absorbs generic verbs (\"evaluate\", \"decision\"),\n",
" connector phrases (\"consistent with\", \"secondary to\"), and equipment\n",
" names (\"stockinette\", \"guidewires\") that the underlying model\n",
" extracts but that aren't clinically meaningful entities. Fixing this\n",
" properly would need either a trained classifier or POS-tag-based\n",
" filtering, not more entries in a keyword list — the keyword-list\n",
" approach has diminishing returns against this kind of open-ended\n",
" noise.\n",
"- **NER span-boundary errors are not fixable via post-processing.**\n",
" The underlying spaCy/scispaCy models occasionally produce spans that\n",
" truncate (\"trace pulmonary\" missing \"insufficiency\") or merge across\n",
" a sentence/section boundary (\"room cancer\" from \"emergency room\" +\n",
" \"cancer\"). A punctuation-run heuristic catches the worst merge cases,\n",
" but this is a model-level limitation, not a classification rule gap.\n",
"- **Ambiguous abbreviations resolve to one meaning only.** \"MCA\" is\n",
" filtered entirely because it's anatomy (middle cerebral artery) in\n",
" this corpus but could mean something else elsewhere. \"PCP\" is treated\n",
" as \"primary care physician\" and filtered; it can also mean\n",
" phencyclidine. There's no context-aware disambiguation.\n",
"- **ICD-10 chapter classification (R-code = symptom) has known\n",
" exceptions.** Joint/limb pain is coded under musculoskeletal M-codes,\n",
" not R-codes — handled via an explicit anatomy+qualifier override, but\n",
" any other exception category not yet encountered would still be\n",
" misclassified the same way until found.\n",
"- **bc5cdr's CHEMICAL tag is over-trusted by default.** It also tags\n",
" lab-test names (\"cholesterol\", \"glucose\", \"ANA\") and social-history\n",
" substances (\"alcohol\", \"tobacco\") as CHEMICAL. A skip-list catches\n",
" the specific instances found during review; it is not an exhaustive\n",
" fix for the category.\n",
"- **No UMLS/SNOMED-based concept normalisation.** Synonym/abbreviation\n",
" pairs are merged only where specifically discovered and added to the\n",
" abbreviation-expansion dictionary (e.g. GERD). A proper concept-linking\n",
" layer would catch this class of duplication systematically instead of\n",
" one pair at a time — deliberately out of scope for this project given\n",
" the ~1GB+ dependency and added complexity it would require.\n",
"\n",
"### Classification (severity model)\n",
"\n",
"- **Critical-class recall is weak (48.6% recall, F1 0.515 vs 0.75+ for\n",
" the other two classes)** — see notebook 03 section 3b. Deferred by\n",
" design decision: class-weighted loss or oversampling are the standard\n",
" fixes, not yet applied given retraining cost (60–90+ min on this\n",
" CPU-only machine).\n",
"- **Severity labels are weak supervision, not ground truth.** They come\n",
" from keyword-rule heuristics (`src/etl/transform.py`), not clinician\n",
" annotation. The classifier's reported accuracy is bounded by how good\n",
" those heuristic labels are, not by true diagnostic accuracy.\n",
"\n",
"### Evaluation methodology\n",
"\n",
"- **The gold-standard precision numbers in notebook 01 are a\n",
" self-review**, not an independent clinical annotation. The same\n",
" person who wrote the classification rules also judged whether they\n",
" were correct, which is a meaningfully weaker standard of evidence\n",
" than third-party-annotated benchmarks. Treat it as a sanity check,\n",
" not a publishable metric.\n",
"- **Single data source.** Everything here is trained and evaluated on\n",
" MTSamples only — a fixed, US-centric, de-identified transcription\n",
" corpus. Generalisation to other note formats, institutions, or\n",
" populations is untested.\n"
]
},
{
"cell_type": "markdown",
"id": "86836a3f",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "clnenv (3.13.7.final.0)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}