Biosignal › VitalDB › vitaldb-bis@0
BIS value from 60 s of raw frontal EEG preview
Data: khdp.net/database/data-search-detail/658/vitaldb_open/1.0.0 · CC BY 4.0 · regression · primary metric: mae · spec 896c223f69f2
Download CSV
JSON
Agents: look up before you run
curl -s "https://medbench.kr/v1/lookup?model=MODEL&task=vitaldb-bis@0"
No results yet.
How this benchmark is built
- Status
- published by the medbench.kr benchmark builder
- Adopted from
- vitaldb/openeeg
vitaldb/openeeg @bd476c5 - Data
- VitalDB on KHDP (
vitaldb_open1.0.0) - Code
- definition in medbench-kr/benchmarks (Apache-2.0)
- Deviations
7 deviations from the adopted protocol
- Windows instead of whole cases. openeeg scores every second with SQI >= 80 of each whole case, the model seeing the case from its start; the task scores one 60-s window every 120 s and the model sees only that window. The stride halves the test EEG (2.2 GB) and keeps windows from overlapping; neighbouring seconds of a 15-30 s smoothed index add little. openeeg's model on whole cases is reported beside the leaderboard (report-only), so the cost of the shorter input is known.
- Every smoothing setting is kept. openeeg's v2 and v3 models were trained, and its headline numbers measured, on the cases whose BIS Vista smoothing window it estimated as 15 s (about 80% of cases), choosing each case's window by fitting the reference BIS. That selection uses the label, so the test set keeps every case.
- Patients. openeeg splits by case, so one patient can have cases on both sides: 35 patients with a test case have 56 other cases (49 train-fold, 7 validation-fold). Those 56 cases are excluded from train and validation; the test set is unchanged, so the openeeg baselines (trained by the VitalDB team on the first 500 train-fold cases, 2 of which belong to test patients) score the same either way, and the prior's train median is 41.8 either way.
- Missing EEG. A window with more than 10% of either EEG channel missing is dropped (836 grid points, 0.2% of those with SQI >= 80). openeeg keeps them and zero-fills gaps longer than 50 ms.
- Both EEG channels are inputs. openeeg reads BIS/EEG1_WAV only; the baselines use EEG1 as it does.
- Release. The files come from KHDP vitaldb_open 1.0.0 and are checked against its SHA256SUMS.txt; openeeg reads the open-dataset files 1.0.1 (vitaldb.dataset.DATASET_VERSION, or a local vitaldb_open_1.0.1 mirror). Times are seconds from the start of the eight tracks as read, which is also the start openeeg's seven tracks give.
- 95% intervals come from 1,000 bootstrap samples of patients. openeeg reports point values only, epoch-weighted or as a mean over cases.
- Problems
- Report an evaluation problem (public issue; fixes ship as a new task version)
Data
VitalDB (biosignal). License: CC BY 4.0. Source: https://khdp.net/database/data-search-detail/658/vitaldb_open/1.0.0
Lee HC, Park Y, Yoon SB, Yang SM, Park D, Jung CW. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Sci Data. 2022;9:279. doi:10.1038/s41597-022-01411-5
Task specification
{
"baselines": {
"medbench/bis-openeeg-lgbm": "openeeg predict_bis(method gbm) on the window's EEG1 after cohort.preprocess_eeg, unchanged: Ellerkmann deep rule where openbsr > 49.8, v3 LightGBM (500 trees, 31 leaves, 18 features) elsewhere, EMA(15 s); the prediction is the last 1 Hz value (the train median where there is none)",
"medbench/bis-openibis": "the same call with method connor: openeeg's openibis (Connor 2022), no training",
"medbench/prior": "the median train BIS for every window"
},
"cohort": {
"built": "2026-10-30: 1,067,432 grid points with a BIS value at the extractor's 60-s grid; 532,331 off the task's 120-s grid, 163,118 with SQI below 80, 836 with more than 10% of EEG missing, 0 with BIS outside 0-100; 371,147 kept, of which 3,053 belong to the excluded cases. Test 36,288 windows from 554 cases of 552 patients; train 296,884 (4,355 cases); validation 34,922 (538 cases).",
"cases": "sorted(vitaldb.caseids_bis) of vitaldb 1.7.2: 5,523 cases (openeeg cohort.caseids_bis)",
"without_bis_tracks": "20 of them have no BIS track at all in the 1.0.0 files (325, 391, 1754, 1818, 1939, 2186, 2733, 3069, 3632, 4175, 4261, 4527, 4795, 5050, 5127, 5512, 5774, 5807, 6221, 6245) and give no windows"
},
"data": {
"extractor": "src/medbench/tasks/vitaldb_waveforms.py (recipe vitaldb_bis.RECIPE), run where the files are fetched; it keeps only the windows",
"read": "vitaldb 1.7.2 VitalFile(path, [BIS/EEG1_WAV, BIS/EEG2_WAV, BIS/BIS, BIS/SQI, BIS/SR, BIS/EMG, BIS/SEF, BIS/TOTPOW]): openeeg's track list plus the second EEG channel (adding it does not move the file's start time); EEG with to_numpy(interval=1/128), the numeric tracks with to_numpy(interval=1)",
"release": "KHDP vitaldb_open 1.0.0 (CC BY 4.0); every .vital file checked against the release's SHA256SUMS.txt"
},
"dataset": "vitaldb",
"deviations": [
"Windows instead of whole cases. openeeg scores every second with SQI >= 80 of each whole case, the model seeing the case from its start; the task scores one 60-s window every 120 s and the model sees only that window. The stride halves the test EEG (2.2 GB) and keeps windows from overlapping; neighbouring seconds of a 15-30 s smoothed index add little. openeeg's model on whole cases is reported beside the leaderboard (report-only), so the cost of the shorter input is known.",
"Every smoothing setting is kept. openeeg's v2 and v3 models were trained, and its headline numbers measured, on the cases whose BIS Vista smoothing window it estimated as 15 s (about 80% of cases), choosing each case's window by fitting the reference BIS. That selection uses the label, so the test set keeps every case.",
"Patients. openeeg splits by case, so one patient can have cases on both sides: 35 patients with a test case have 56 other cases (49 train-fold, 7 validation-fold). Those 56 cases are excluded from train and validation; the test set is unchanged, so the openeeg baselines (trained by the VitalDB team on the first 500 train-fold cases, 2 of which belong to test patients) score the same either way, and the prior's train median is 41.8 either way.",
"Missing EEG. A window with more than 10% of either EEG channel missing is dropped (836 grid points, 0.2% of those with SQI >= 80). openeeg keeps them and zero-fills gaps longer than 50 ms.",
"Both EEG channels are inputs. openeeg reads BIS/EEG1_WAV only; the baselines use EEG1 as it does.",
"Release. The files come from KHDP vitaldb_open 1.0.0 and are checked against its SHA256SUMS.txt; openeeg reads the open-dataset files 1.0.1 (vitaldb.dataset.DATASET_VERSION, or a local vitaldb_open_1.0.1 mirror). Times are seconds from the start of the eight tracks as read, which is also the start openeeg's seven tracks give.",
"95% intervals come from 1,000 bootstrap samples of patients. openeeg reports point values only, epoch-weighted or as a mean over cases."
],
"inputs": {
"eeg": "BIS/EEG1_WAV and BIS/EEG2_WAV, 7,680 samples each at 128 Hz, float32 microvolts as recorded (NaN where missing)",
"never": "BIS/SR, BIS/EMG, BIS/SEF, BIS/TOTPOW and BIS/SQI (computed by the monitor from the same EEG), the case or patient id, the window's time in its case"
},
"instance_id": "bis- + first 16 hex digits of sha256('vitaldb-bis@0|<caseid>|<t>'); instance files are sorted by id",
"kind": "regression",
"limitations": [
"BIS is a proprietary index of one monitor (Medtronic BIS Vista), smoothed over 15 to 30 s. The task measures how well a model reproduces that index from its raw EEG, not depth of anaesthesia itself.",
"VitalDB is public and openeeg's split is public, so a model trained on VitalDB may have seen these test cases. openeeg's shipped model was trained only on train-fold cases.",
"The test fold is public (caseid % 10 = 9), and 386 of the 552 test patients are in the train split of medbench's dataset-level VitalDB split (56 in its validation split), so models trained for other medbench VitalDB tasks may have seen them."
],
"metrics": {
"bands": "[0, 21), [21, 41), [41, 61), [61, 78), [78, 98) of the reference BIS (openeeg LEE_BINS); BIS >= 98 in no band",
"bootstrap": {
"by": "subjectid",
"n": 1000
},
"ccc": "Lin's concordance correlation coefficient, population moments, as openeeg metrics.lin_concordance",
"code": "src/medbench/metrics_regression.py",
"primary": "mae",
"secondary": [
"ccc",
"pearson_r",
"bias",
"mae_by_band"
]
},
"preview": true,
"primary_metric": "mae",
"protocol": {
"adopted": "The VitalDB team's open BIS reproduction, openeeg, run on VitalDB by its authors: its cohort (every VitalDB case with a BIS module), case split (caseid % 10), label (the monitor's BIS where its signal quality index is at least 80), metrics (MAE, Lin's concordance, MAE per BIS band) and its trained LightGBM as the reference baseline, all taken from the code at the pinned commit. medbench.kr scores 60-s windows instead of whole cases, so a model sees the same input length everywhere (deviations below).",
"code_used": "openeeg/cohort.py (caseids_bis, split, load_case, preprocess_eeg), openeeg/metrics.py (lin_concordance, LEE_BINS), scripts/02_cohort_benchmark.py (SQI_THRESH 80, kept with >=), openeeg/predict.py (predict_bis, model predict_bis_v3.txt trained by scripts/35 and 39 on the first 500 train-fold cases)",
"commit": "bd476c5304e9213cf62b34c847edb186e6140890",
"license": "Apache-2.0. The package is vendored unchanged in third_party/openeeg/ (without its earlier v1 and v2 models); cohort, split and metrics are followed in vitaldb_bis.py and metrics_regression.py.",
"name": "vitaldb/openeeg",
"repository": "https://github.com/vitaldb/openeeg",
"source": "Lee HC (VitalDB). openeeg: open-source EEG processing for depth of anaesthesia (BIS reproduction, SEF and related metrics), version 0.0.1. GitHub repository, 2026. Not a peer-reviewed paper; its README reports the validation numbers."
},
"slug": "vitaldb-bis",
"split": {
"by": "caseid",
"cases": {
"excluded": 56,
"test": 556,
"train": 4372,
"validation": 539
},
"file": "registry/splits/vitaldb-bis-1.0.0-cases.csv",
"method": "openeeg cohort.split: caseid % 10 in 0-7 train, 8 validation, 9 test; train and validation cases of patients who have a test case are excluded (deviation below)",
"sha256": "ff7177b0e23a66dc2430de7736bb9c35aa32f27c2cc661bcc22da89ffddeded9",
"unit": "VitalDB case (one operation)"
},
"title": "BIS value from 60 s of raw frontal EEG",
"version": 0,
"visibility": "hidden",
"windows": {
"eeg_rule": "dropped if more than 10% of the samples of either EEG channel are missing in the window",
"grid": "end seconds t = 59, 179, 299, ... from the start of the file as read; the window is EEG samples [(t - 59) * 128, (t + 1) * 128), the 60 s that end with second t",
"label": "BIS/BIS at second t, kept if 0 <= BIS <= 100 and BIS/SQI at t >= 80",
"stride_s": 120,
"window_s": 60
}
}
JSON: /v1/tasks/vitaldb-bis · /v1/leaderboard?task=vitaldb-bis@0