Gyroink Get the app
  1. Stories
  2. Sci-Fi
  3. What the Algorithm Knows
  4. Features

Features

Chapter 2 of 5 · by Arun Sethi · 1,739 words · 21 Jun 2026

19
Chapters ▾

Maya slipped the rain-slicked door shut behind her, the automatic sensor’s hiss a reminder that the building’s climate control still ran on a schedule it never questioned. She hoisted her tote, its strap digging into the side of her shoulder, and ducked beneath the awning of the underground concourse. The monsoon drummed a relentless percussion on the concrete, and somewhere a vendor shouted, “Chai! Fresh chai!” The city’s pulse, she thought, was a data stream she could no longer pretend to be outside of.

She had a plan, or at least a placeholder for one: reverse-engineer the risk model that had already decided her fate. The algorithm was a black box wrapped in corporate secrecy, but it was built on inputs—features, as the data scientists liked to call them. If she could enumerate those, she could see how it had anticipated her collapse, and maybe how to hide from it.

The first step was to get a copy of the model’s schema. Arogha Health’s internal API portal was guarded by a two-factor gate that required a hardware token and a biometric scan. Maya’s badge still carried her fingerprint, and the token—an old-school fob she’d never used—was tucked in her bag. She set a coffee-shop table as her temporary workstation, the laptop’s screen glowing like a lantern in the rain-dampened gloom.

She logged in, the system prompting, “Enter one-time password.” A tiny vibration on her wrist device delivered a six-digit code. The portal’s interface was a stark grid of collapsible menus. She navigated to “Model Registry,” then filtered by “ArogyaHealth-Risk-V3.” The entry showed a version number, a deployment date, and a button labeled “Download Schema.” The download began, a JSON file populating the download folder with a nondescript name: risk_v3_schema.json.

Maya opened the file in a text editor, the raw code a tangle of key-value pairs. The first few lines listed metadata—model ID, training data window, loss function—nothing surprising. Then came the “features” array, a list of variables the model considered. She read them aloud, as if speaking to the rain: “age, gender, BMI, smoking_status, chronic_conditions…” The list went on, a litany of the usual suspects. But then, nestled between “cholesterol_level” and “last_hospitalization,” she saw “pharmacy_fill_time,” “daily_step_count,” “commute_mode_change.” A dry chuckle escaped her.

She leaned back, the rain now a curtain of white noise against the glass. The model cared about the minute timing of when she refilled her prescription, how many steps she logged on her smartwatch, and whether she had switched from metro to bike last week. The algorithm’s sophistication lay not in exotic biomarkers but in the mundane cadence of everyday life.

She copied the list into a spreadsheet, each feature a column header. Next, she needed the values that the model had attached to her. Arogya’s data lake was a massive, partitioned store, but the API allowed her to request a “feature vector” for a given member ID. She typed the query, substituted her own ID, and hit “Execute.” The response was a dense array of numbers, each corresponding to the schema she had just extracted.

“Pharmacy_fill_time: 14.3,” she read, the number representing the hour of day the prescription was filled, normalized to a 24-hour clock. “Daily_step_count: 3,821,” the count for the past 30 days, averaged. “Commute_mode_change: 1,” a binary flag indicating a switch from public transit to personal vehicle in the last fortnight. The rest of the vector was a sea of decimals, each reflecting a weighted assessment of her health trajectory.

She opened a new tab, a dashboard she had built during a hackathon three years ago, a simple Flask app that plotted time series. She fed the pharmacy_fill_time into a line chart, overlaying it with her known prescription dates, which she had reconstructed from email receipts. The plot showed a sharp spike: on the day the model flagged her, she had filled a prescription for a new antihypertensive at 2:17 a.m., a time that, according to the model’s training data, correlated with a higher risk of sudden cardiovascular events. The correlation was spurious, she knew, but the model had learned it anyway.

She added the step count to the same dashboard, pulling data from the health app on her phone. The app logged her steps via an accelerometer, syncing nightly to the cloud. The average hovered around 4,500 steps per day, but there was a dip in the week before her episode: a 30-percent drop that coincided with a rainy stretch when the metro was shut down for maintenance. The model apparently saw a deviation from her baseline as a signal of deteriorating health, even though the cause was clearly external.

Finally, she examined the commute mode flag. She recalled, with a wry smile, that she’d taken a bicycle to work for a week because the metro line was flooded. The flag toggled from 0 to 1 on the day she started pedaling. The model logged that as a risk factor, perhaps interpreting the shift as a stressor or as an indicator of reduced access to reliable transport.

Maya stared at the three charts, their axes of time and mundane behavior. The algorithm had been fed a steady stream of ordinary data points, each one innocuous on its own, but together they painted a portrait that anticipated her collapse. The insight was both exhilarating and unsettling: the model’s power derived not from exotic scans of DNA, but from the relentless quantification of daily habit.

She pivoted to the code that had generated the feature vector. The pipeline was a series of ETL (extract-transform-load) jobs written in Python, orchestrated by Apache Airflow. The DAG (directed acyclic graph) ran nightly, pulling raw logs from the data lake, cleaning them, and merging them into a feature store. Maya traced the lineage of “pharmacy_fill_time.” The source was a table called “prescription_events,” which recorded every pharmacy transaction with a timestamp. A transformation step truncated the timestamp to the hour and applied a sinusoidal encoding to capture diurnal patterns. The code was concise:

```python def encode_hour(ts): hour = ts.hour + ts.minute/60.0 return np.sin(2*np.pi*hour/24), np.cos(2*np.pi*hour/24) ```

The sinusoid turned a raw hour into two continuous features, preserving the circular nature of time. The model, she realized, could detect that a 2 a.m. fill was anomalously early for most people, and flag it as a risk marker.

She moved on to “daily_step_count.” The source was a table “wearable_metrics,” which aggregated raw accelerometer data into daily step totals. A filtering step removed days with fewer than 1,000 steps, assuming those were device off-times. Then a rolling window computed a 30-day moving average, which the model used as the feature. The code was straightforward, but the choice of a 30-day window was a design decision that smoothed out short-term fluctuations while preserving longer trends.

The “commute_mode_change” flag was more opaque. Its source was a table “location_traces,” which stored GPS pings from the company’s corporate VPN. A heuristic detected a change in the dominant mode of transport based on speed and distance patterns. If a user’s average speed crossed a threshold—5 km/h for walking, 15 km/h for cycling, 30 km/h for motorized transport—the flag flipped. The code was a series of if-else statements, each one a crude approximation of human mobility.

Maya leaned back, the rain now a steady hiss on the glass. The model’s architecture was a gradient-boosted decision tree, a series of weak learners that combined to form a strong predictor. The tree split on these engineered features, assigning higher leaf weights to the combinations that correlated with adverse outcomes in the training data. There was no mysticism in the model, only the cumulative effect of well-intentioned engineering choices.

She felt a peculiar satisfaction in this procedural dissection. It was like taking apart a clock to see which gear made the hands tick faster. Each gear was a piece of her routine, each tooth a data point she had never thought worth noting. The clock, however, ticked not just for her but for millions of other Arogya members, each a collection of timestamps, steps, and commute logs.

The next logical step was to test whether she could perturb the features enough to change the model’s output. She opened a sandbox instance of the model, a copy deployed for internal testing. Feeding it a synthetic feature vector, she altered the pharmacy_fill_time from 14.3 (2 a.m.) to 12.5 (noon), nudged the step count up to 5,200, and set the commute flag to 0. The model’s risk score dropped from 0.82 to 0.41, a threshold below the flagging cutoff.

She repeated the experiment, this time adjusting only the step count. Raising it by 500 steps lowered the risk by a mere 0.03. The pharmacy time had the biggest swing, a change of 0.19 per hour. The commute flag contributed a modest 0.05. The model, she realized, weighted the variables in a hierarchy that reflected the data it had been fed, not any intrinsic medical insight.

Maya logged the results in a fresh document, titling it “Feature Sensitivity – 07/12/2026.” She noted, in her terse style, “Early pharmacy fills = high risk. Low steps = marginal risk. Commute mode = minor risk.” She added a line of dry humor: “If I start refilling prescriptions at 9 a.m. and walk to the office, I’ll be safe—unless I get a promotion and start biking.”

The rain intensified, drumming a louder rhythm against the concourse glass. A commuter hurried past, clutching a newspaper that proclaimed, “AI Predicts Your Health—Are You Ready?” Maya glanced at the headline, then at her own screen. The algorithm had already decided that she was a data point in need of attention, long before any symptom manifested. She felt the weight of that knowledge settle, a quiet pressure that pressed against her ribs.

She closed the notebook, saved the analysis, and stood. The building’s exit doors opened automatically, a wave of warm air spilling out onto the wet street. The city smelled of petrichor and exhaust, the neon signs flickering in the downpour. Maya pulled her tote tighter, the weight of the data she now carried as heavy as the rain-laden clouds above.

She walked toward the nearest bus stop, her steps measured, her mind cataloguing the next set of features she would need to examine. The algorithm was right, she thought, not because it understood her, but because it had learned the patterns of the world she inhabited. The realization was simple, almost anticlimactic: the model’s insight lay in the ordinary, and the ordinary was, for her, a kind of truth.

Keep your place, and listen

The app remembers where you stopped, reads chapters aloud, and works offline. Writing lives there too.

More from Arun Sethi