CASE_ID- Just an ID, doesn't help with patternsVACCINATION_DATE- Converted to numeric first, then droppedNOTES- Text description, can't use in MLAPPROVED_DATE- Not useful for pattern detection
days_since_start- Converted vaccination date to days (0, 1, 2, 3...) so model can use it
VACCINE (3 types) → 2 columns:
- Original: COVAXIN, COVISHIELD, SPUTNIK_V
- New:
VACCINE_COVISHIELD(0 or 1),VACCINE_SPUTNIK_V(0 or 1) - Note: COVAXIN is baseline (both = 0)
GENDER (2 types) → 1 column:
- Original: M, F
- New:
GENDER_M(1 = Male, 0 = Female)
DIAGNOSIS (14 types) → 13 columns:
- Original: ALLERGIC_REACTION, ANAPHYLAXIS, BELL_PALSY, FATIGUE, FEVER, etc.
- New:
DIAGNOSIS_ANAPHYLAXIS,DIAGNOSIS_BELL_PALSY,DIAGNOSIS_FATIGUE, etc. - Each = 0 or 1 (1 means patient had that diagnosis)
- ALLERGIC_REACTION is baseline
OUTCOME (5 types) → 4 columns:
- Original: DEATH, HOSPITALIZED_RECOVERED, ONGOING_TREATMENT, RECOVERED_AT_HOME, RECOVERED_WITH_SEQUELAE
- New:
OUTCOME_HOSPITALIZED_RECOVERED,OUTCOME_ONGOING_TREATMENT, etc. - Each = 0 or 1
- DEATH is baseline (all = 0 means death)
STATE (15 states) → 14 columns:
- Original: AndhraPradesh, Bihar, Delhi, Gujarat, Haryana, etc.
- New:
STATE_Bihar,STATE_Delhi,STATE_Gujarat, etc. - Each = 0 or 1 (1 means event happened in that state)
- AndhraPradesh is baseline
CLASSIFICATION (5 types) → 4 columns:
- Original: A1, A4, B1, B2, C
- New:
CLASSIFICATION_A4,CLASSIFICATION_B1,CLASSIFICATION_B2,CLASSIFICATION_C - Each = 0 or 1
- A1 is baseline
HOSPITALIZED (2 types) → 1 column:
- Original: YES, NO
- New:
HOSPITALIZED_YES(1 = Yes, 0 = No)
DOSE_NUMBER- 1, 2, or 3AGE- Patient ageSYMPTOM_ONSET_DAYS- Days after vaccinationDAYS_HOSPITALIZED- Days in hospital
- Original: 600 rows × 15 columns
- After Preprocessing: 600 rows × 44 columns
- After Scaling: Same size, but values normalized (mean=0, std=1)
severity- Text label (VERY_SAFE, etc.), derived from trust_score already
vaccine (3 types) → 2 columns:
- Original: COVAXIN, COVISHIELD, SPUTNIK_V
- New:
vaccine_COVISHIELD,vaccine_SPUTNIK_V - COVAXIN is baseline
trust_scoretotal_aefi_reportedcausal_casesdeathshospitalizedtotal_doses_administereddeath_rate_per_100kcausal_rate_per_100ksafe_percentage
- Original: 3 rows × 11 columns
- After Preprocessing: 3 rows × 11 columns
- After Scaling: Same size, values normalized
- covid_aefi_processed.csv - Encoded features, not scaled (good for reading)
- covid_trust_scores_processed.csv - Encoded features, not scaled
- covid_aefi_scaled.npy - Scaled data ready for ML model (numpy array)
- covid_trust_scores_scaled.npy - Scaled data ready for ML model
When we have text categories like "COVAXIN", "COVISHIELD", "SPUTNIK_V", we can't directly use them in ML models.
One-Hot Encoding converts each category into binary columns:
- COVAXIN →
[0, 0](both new columns = 0) - COVISHIELD →
[1, 0](first column = 1) - SPUTNIK_V →
[0, 1](second column = 1)
This way, the model can mathematically work with the data!
- Load the scaled data:
np.load('covid_aefi_scaled.npy') - Split using
data_split()function - Train Isolation Forest on training data
- Predict anomaly scores on test data
- Higher anomaly scores = suspicious patterns = lower trust!