Picture this. You have just moved to a new city for graduate school. It is a Friday evening and you want to explore a neighborhood you have been curious about. You open Google Maps, find directions, and head out. But Google Maps tells you how to get somewhere — it does not tell you how it feels to walk there at 9pm as a young woman alone. It does not tell you that the street lights on that block are frequently broken, or that residents on local forums have been posting about a recent uptick in street harassment in that area.
This was not a hypothetical for us. As international students at Illinois Institute of Technology, the three of us found ourselves navigating Chicago’s neighborhoods with a persistent undercurrent of uncertainty. In our early months, we instinctively moved in groups — safety in numbers. But as we began to want to explore independently, we realized there was no tool that brought together the full picture: what the official data says, what the city’s infrastructure looks like, and most importantly, what people in the community are actually experiencing and saying.
That gap is what HerWay was built to address.
HerWay is a data-driven urban safety and accessibility platform built specifically for women navigating Chicago. It is not a crime map. It is not an alert system. It is something more nuanced — a platform that combines three different kinds of signals to give users a layered understanding of what a neighborhood is actually like.
Those three signals are:
Together, these paint a much richer picture than any single source could. A neighborhood with moderate crime statistics might still feel unsafe because of poor lighting and a pattern of community-reported harassment. Conversely, a neighborhood with historically high crime numbers might have a largely reassuring community perception today. HerWay captures both.
The platform delivers this through two features: an interactive map where users can explore neighborhoods and click through for a detailed safety breakdown, and a chatbot interface where users can ask natural language questions like “Is it safe to walk alone in Rogers Park at night?” and receive contextually grounded answers.
Urban safety is not experienced equally. Women, particularly women of color, women who are international students, and women who are new to a city, face a specific set of concerns when navigating public spaces — concerns that are often invisible in aggregate crime statistics. Street harassment, poor lighting, feeling watched or followed — these experiences do not always result in police reports, but they absolutely shape how confidently someone moves through a city.
Existing tools tend to fall into two categories: crime maps that show raw incident counts without context, or general-purpose navigation tools that ignore safety altogether. Neither serves the specific, nuanced needs of the communities HerWay is designed for.
This is fundamentally a question of equity in information access. A student with local connections and years of experience in Chicago has an intuitive sense of which neighborhoods feel safe and when. A student who arrived six months ago from another country does not have that accumulated knowledge. HerWay is an attempt to bridge that gap — to give newcomers, international students, and women navigating a new city access to the kind of contextual, community-grounded safety intelligence that is otherwise only available through lived experience over time.
Across 77 Chicago neighborhoods analyzed using a combination of community data and official records, several findings stood out:
HerWay is a research prototype, not a finished product, and being honest about its limitations is as important as celebrating its findings.
Reddit users are not representative of all Chicago residents. They skew younger, more tech-savvy, and English-speaking. The voices of elderly residents, non-English-speaking communities, and people without internet access are underrepresented in our community data. A neighborhood like Chinatown or a heavily Spanish-speaking area may have rich community safety discourse happening in spaces we did not capture.
Our scoring system uses manually chosen weights — crime gets 40% of the combined score, Reddit community sentiment gets 25%, and so on. These weights reflect our informed judgment, but they are not derived from statistical evidence. Different weight choices would produce different neighborhood rankings.
Finally, the data we used is a snapshot. Safety patterns change over time — a neighborhood that feels unsafe today may be in the middle of a revitalization, and our model would lag behind that reality.
These limitations do not diminish what HerWay does. But they are important reminders that data-driven safety tools must be interpreted with critical awareness of what the data can and cannot tell us.
The idea for HerWay began in August 2025 as an independent exploration among the three of us — a shared response to a shared experience of navigating Chicago as newcomers. In January 2026, the project was selected for the Spring 2026 SoReMo Research Fellowship at Illinois Institute of Technology, which gave it formal structure, mentorship, and resources.
From January through March 2026, the team divided the technical work into three parallel workstreams — the Reddit data pipeline and NLP analysis (Sanjana), crime data analysis (Ananya), and 311 analysis, frontend development, and system integration (Sharanya). A key analytical pivot occurred in February 2026, when the source agreement signal — the divergence between Reddit-expressed fear and official crime data — emerged as more valuable than the combined score alone, reshaping the system’s overall design philosophy.
By April 2026, all three pipelines had been merged, scoring was finalized, and the platform was deployed to Vercel with a live interactive map and a chatbot powered by Azure’s GPT-4o API. The report was submitted in May 2026.
Urban safety analysis in academic and policy contexts typically relies on two kinds of data: official crime statistics and survey-based perception studies. Crime statistics are objective but incomplete — they only capture reported incidents, and many safety-relevant experiences (harassment, intimidation, the discomfort of a poorly lit street) are never reported (Lum & Isaac, 2016). Survey-based perception studies are richer but expensive, slow, and difficult to keep current.
Across all three datasets, preprocessing was performed to ensure consistency and comparability at the neighborhood level. Date fields were parsed into a standardized datetime format to enable temporal analysis. Records were mapped to Chicago community areas using numeric identifiers and name mapping dictionaries where necessary.
Missing or unknown values were handled by either excluding incomplete records or assigning them to an “unknown” category when appropriate. Each dataset was then aggregated at the neighborhood level so that all signals — crime, 311 service requests, and Reddit data — could be aligned and compared within a common structure.
This preprocessing step was critical for enabling a unified analysis across datasets that originally existed in different formats, scales, and levels of granularity.
The HerWay methodology combines multiple analytical techniques to extract meaningful signals from each dataset and integrate them into a unified framework.
For Reddit data, a pipeline was developed to identify neighborhood mentions using a gazetteer-based approach, followed by lexicon-based safety scoring and transformer-based sentiment classification. This produced a community-level measure of perceived safety.
For crime data, incidents were classified into categories such as violent and non-violent crime, and additional features such as night crime percentage, arrest rate, and temporal patterns were derived to capture different dimensions of activity.
For 311 service request data, requests were aggregated by type, volume, and resolution time to reflect infrastructure conditions and municipal responsiveness.
All signals were normalized using min-max scaling to bring them to a common range. A weighted scoring system was then applied to combine these signals into a single neighborhood-level score, while also preserving individual components for interpretation.
This approach allows HerWay to move beyond single-source analysis and instead capture the interaction between official records, infrastructure conditions, and community perception.
The Chicago 311 Service Request dataset captures non-emergency issues reported by residents, including abandoned vehicles, street light outages, alley light issues, sanitation concerns, and vacant or abandoned buildings. Unlike crime data, which mainly reflects reported incidents, 311 data captures the everyday problems residents experience in their neighborhoods. Because of this, it provides a useful view of urban livability, infrastructure quality, and how actively residents engage with city services.
This dataset is used because neighborhood awareness should not depend only on crime statistics. A neighborhood may have lower crime but still experience issues such as poor lighting, abandoned vehicles, or delayed municipal response. These factors affect how safe, maintained, and livable an area feels.
By including 311 service requests, the analysis captures infrastructure stress, service demand, and city responsiveness. This makes the overall HerWay system more balanced because it combines public safety, municipal conditions, and community-level signals.
Before analysis, the dataset was cleaned and prepared to make it suitable for neighborhood-level comparison. Column names were standardized for consistency, and date fields were converted into datetime format so that request timing and resolution patterns could be analyzed.
Resolution time was calculated by subtracting the request creation date from the completion date. Requests were then mapped to neighborhoods using community area identifiers. Missing or unknown neighborhood values were handled, and only relevant request types were retained for focused analysis. This helped reduce noise and made the final analysis more meaningful for HerWay.
The request type breakdown shows that abandoned vehicle complaints form the largest share of 311 service requests, accounting for approximately 53% of the selected data. Street light outage complaints are the second-largest category at approximately 36%. Alley light issues and vacant or abandoned building complaints make up a much smaller portion.
This suggests that most reported concerns are related to everyday maintenance and infrastructure rather than emergency situations. In the context of neighborhood awareness, this is important because issues such as abandoned vehicles and poor lighting can affect how residents perceive safety, cleanliness, and accessibility.
The neighborhood-level request volume shows that South Chicago has the highest number of service requests, followed by Chicago Lawn, Roseland, Auburn Gresham, Bridgeport, Archer Heights, Little Village, and Chatham.
This indicates that service demand is not evenly distributed across Chicago. Some neighborhoods experience higher levels of reported infrastructure or maintenance concerns, which may reflect greater urban stress, higher resident reporting activity, or both. For HerWay, this helps identify areas where municipal service issues are more visible and should be considered alongside crime and sentiment data.
The average resolution time varies significantly by request type. Vacant and abandoned building complaints take the longest to resolve, averaging approximately 41 days. Abandoned vehicle complaints take around 20 days, while alley light and street light issues are resolved faster, at around 12 and 7 days respectively.
This difference shows that not all service requests require the same level of effort. Structural issues such as vacant buildings may involve inspections, ownership verification, legal processes, or coordination across departments. Lighting issues, on the other hand, are often more routine and can be addressed more quickly. This makes resolution time an important indicator of municipal responsiveness and issue complexity.
The submission channel breakdown shows that phone calls remain the most common way residents submit 311 requests, making up approximately 46% of all submissions. Internet submissions account for about 22%, mobile devices for about 18%, and other channels for around 14%.
This shows that traditional reporting methods are still widely used, even though digital platforms are available. The lower share of mobile and internet submissions may point to differences in digital access, user preference, awareness of online tools, or comfort with technology. For an application like HerWay, this suggests that civic data may also reflect how easily different communities can access reporting systems.
The monthly trend shows that 311 request volume increases during warmer months and declines during winter. Requests are relatively high from March through October, with noticeable peaks around May and July. The lowest volumes appear around November and December.
This seasonal pattern is likely influenced by weather, outdoor activity, visibility of neighborhood issues, and seasonal infrastructure needs. For example, abandoned vehicles, lighting issues, and exterior building concerns may become more noticeable when residents spend more time outside. This trend shows that 311 data is not static and should be interpreted with time-based context.
The 311 service request analysis shows that urban concerns in Chicago are strongly connected to infrastructure and maintenance. Abandoned vehicles and lighting issues dominate the dataset, which suggests that everyday neighborhood conditions play a major role in resident experience.
The analysis also shows that certain neighborhoods carry a higher service request burden. This does not automatically mean that these neighborhoods are unsafe; instead, it indicates higher visible service demand, higher reporting activity, or unresolved maintenance concerns. When combined with crime data and Reddit sentiment, 311 data provides a more complete understanding of neighborhood conditions.
The crime data used in this project was sourced from the City of Chicago Data Portal, a publicly available repository maintained by the City of Chicago. The dataset, contains records of reported criminal incidents across the city from 2001 onward, updated on a near-daily basis. For this project, data was filtered to a one-year window spanning 2025, yielding a focused and current snapshot of criminal activity across Chicago’s 77 official community areas.
Each record in the dataset represents a single reported incident and includes attributes such as the date and time of occurrence, the primary crime type, a secondary description, the location type (e.g., residence, street, parking lot), whether an arrest was made, whether the incident was classified as domestic, and a numeric community area code. Notably, the dataset does not include exact addresses in its public release — only block-level location and community area codes — which reflects a deliberate privacy protection by the city.
The community area codes are numeric identifiers (1 through 77) corresponding to Chicago’s 77 official community areas as defined by the City. These codes were mapped to community area names by querying the Chicago Community Areas API, also hosted on the Chicago Data Portal. This ensures the mapping remains aligned with official city definitions.
The raw dataset for the 2025 period contained over 200,000 reported incidents across all community areas. The following raw dataset columns were used in preprocessing:
| Column | Description |
|---|---|
date |
Date and time of the incident |
primary_type |
Primary crime classification (e.g., THEFT, BATTERY) |
description |
Secondary description of the incident |
location_description |
Type of location (e.g., RESIDENCE, STREET) |
arrest |
Boolean — whether an arrest was made |
domestic |
Boolean — whether the incident was classified as domestic |
community_area |
Numeric code (1–77) for the Chicago community area |
The following preprocessing steps were applied:
Date parsing and feature extraction. The
date column was parsed into a datetime object, from which
the following temporal features were derived: hour of day, day of week
(as a named string), and month. These features were used in the EDA to
identify peak activity periods.
Community area mapping. The numeric
community_area field was joined with the community area
name mapping obtained from the Chicago Data Portal API. Records with
missing or null community area codes were excluded from community-level
analysis, as they could not be attributed to a specific
neighborhood.
Crime classification. Incidents were classified into
two broad categories based on the primary_type field: -
Violent crimes: Homicide, criminal sexual assault, robbery,
aggravated assault, aggravated battery - Non-violent crimes:
Theft, burglary, criminal damage, narcotics, and all remaining types
This classification was used to compute a violent_pct
attribute per community area — the share of total incidents classified
as violent. A similar approach was applied to derive
domestic_pct, using the existing domestic
boolean field in the dataset.
Night crime classification. Incidents occurring
between 8:00 PM and 5:00 AM were classified as night incidents. The
night_crime_pct attribute represents the share of a
community’s incidents falling within this window.
Arrest rate. The arrest boolean field
was aggregated per community area to compute
arrest_rate_pct — the percentage of incidents that resulted
in an arrest. This is used in the chatbot as a proxy for enforcement
response, not as a measure of crime resolution.
Community crime profile. The final output of the preprocessing pipeline is a per-community summary table with the following attributes for each of the 77 community areas:
| Attribute | Description |
|---|---|
total_incidents |
Total reported incidents in 2025 |
top_crime_types |
Top 3 crime types by frequency |
violent_pct |
Percentage of incidents classified as violent |
domestic_pct |
Percentage of incidents classified as domestic |
arrest_rate_pct |
Percentage of incidents resulting in arrest |
peak_hour |
Hour of day with highest incident frequency |
peak_day |
Day of week with highest incident frequency |
night_crime_pct |
Percentage of incidents occurring at night |
top_location |
Most common location type for incidents |
peak_month |
Month with highest incident count |
Exploratory data analysis was conducted across two dimensions: citywide patterns and community-level profiles.
Citywide patterns
Theft is the most frequently reported crime type citywide, followed by battery and criminal damage. Together these three types account for the majority of all reported incidents. Violent crimes, while representing a smaller share of total volume, are concentrated in specific community areas rather than distributed evenly across the city.
Figure 2: Top 15 reported crime types across all Chicago community areas (2025).
Incident volume follows a clear temporal pattern. Crime activity peaks in summer months (June through August) and drops in winter. Within a given week, Friday and Saturday show the highest incident counts. Within a given day, late evening hours (9 PM to 11 PM) and early morning hours around midnight show the highest frequency, while early morning hours (4 AM to 6 AM) show the lowest.
Figure 4: Total reported incidents by hour of day across Chicago (2025).
Figure 5: Total reported incidents by day of week across Chicago (2025).
Residences and streets are the two most common location types for reported incidents citywide, together accounting for the majority of records. This reflects both the volume of domestic incidents and the prevalence of street-level property crime.
Figure 6: Top 15 location types for reported incidents across Chicago (2025).
Community-level profiles
At the community level, incident volume varies significantly across the 77 areas. The highest-volume communities are concentrated on Chicago’s West and South sides, with Austin reporting the highest total incident count among all community areas. The Loop, despite being Chicago’s downtown core with high foot traffic, shows a high incident count driven primarily by theft rather than violent crime — a pattern that distinguishes it from high-violent-crime communities.
Figure 1: Top 20 community areas by total reported incidents (2025).
Violent crime percentage, as opposed to raw volume, tells a different story. Riverdale, a small community on the far South Side, records the highest violent crime percentage at 50.5% — meaning over half of its reported incidents are classified as violent. However, its total incident volume is among the lowest in the city at approximately 1,000 incidents. This concentration effect is an important nuance: a community can have a high violent crime rate with low overall volume, and a community can have high overall volume with moderate violent crime rates.
Figure 7: Violent crime percentage across all 77 Chicago community areas (2025).
Domestic crime shows a similarly uneven distribution. Riverdale again leads with 36.5% of incidents classified as domestic, the highest in the city. Communities with high domestic percentages tend to also show lower Reddit discussion activity, suggesting these incidents are less visible in public discourse — a pattern that has implications for how community safety is perceived versus reported.
Figure 3: Domestic versus non-domestic crime breakdown across the top 15 community areas by incident count (2025).
Night crime percentage varies from roughly 38% to 52% across communities. Communities where night crime exceeds 48% represent a meaningfully different risk profile for anyone active after dark compared to the citywide baseline.
Arrest rates are notably low across the board, ranging from under 10% to approximately 25% in most communities. This reflects well-documented national patterns in arrest-to-incident ratios and should be interpreted carefully — a low arrest rate does not indicate that crime is underreported, but rather that most reported incidents do not result in an arrest.
Key observations
The EDA surfaces several findings that are meaningful independent of any downstream application:
These findings also directly shaped decisions in the chatbot: the system was designed to present multi-dimensional profiles rather than single scores, and to reason about temporal context when users provide situational information.
Several important limitations of this dataset must be acknowledged, both for academic transparency and for ethical reasons.
Reported crime, not actual crime. The dataset reflects incidents that were reported to and recorded by the Chicago Police Department. A substantial body of research documents that many crimes — particularly domestic violence, sexual assault, and crimes in communities with low institutional trust — go unreported. Low incident counts in a community may reflect underreporting rather than low occurrence.
Policing bias. Reported crime data is shaped by where police patrol. Communities with heavier police presence will generate more incident records simply because more encounters occur. This means the dataset encodes historical policing decisions, not a neutral observation of criminal activity. Communities that have been historically over-policed will appear to have higher crime rates in this data.
No causal interpretation. The attributes derived from this dataset describe patterns, not causes. High night crime percentage does not mean a neighborhood is inherently unsafe at night — it may reflect the types of businesses present, the demographics of residents, or historical enforcement patterns.
Single year snapshot. The decision to use one year of data (2025) was deliberate — this project is a prototype, and a recent, bounded window was chosen to ensure currency and manageability. However, this limits the ability to identify trends. A spike or drop in a single year may not be representative of longer-term patterns, and future iterations of HerWay would benefit from multi-year analysis.
These limitations directly informed the design principle of HerWay: the system does not assign safety scores, does not rank neighborhoods as safe or unsafe, and always presents data as one signal among several rather than a definitive characterization.
Reddit was chosen as our primary community data source for three
reasons. First, it is publicly accessible — no paid API or institutional
access required. Second, Chicago has active, well-populated local
communities on Reddit, particularly r/chicago and
r/AskChicago, where residents regularly discuss
neighborhood safety, personal experiences, and local conditions. Third,
Reddit’s longer-form post format (compared to Twitter) provides richer
contextual information that makes sentiment classification more
reliable.
We considered alternative platforms. Nextdoor would have been ideal for hyper-local community voice, but it requires account access and location verification, making systematic data collection impractical. Twitter/X’s API became severely restricted in 2023, making large-scale collection prohibitively expensive.
Reddit makes its data publicly available through a little-known
feature: adding .json to any Reddit URL returns the raw
data behind that page in a structured format. No authentication is
required for public content.
We wrote a Python script that systematically queries Reddit’s search endpoint across multiple subreddits using safety-relevant keyword combinations. The search terms included phrases and words like “unsafe”, “harassment”, “scared”, “avoid”, “dangerous”, “followed”, “alone at night”, and “street harassment.” We searched across the following subreddits:
r/chicagor/AskChicagor/TwoXChromosomesr/AskWomenr/femalefashionadviceThe script collected post title, body text, score (upvotes), number of comments, date, subreddit, and URL for each post. A two-second pause between requests was built in to avoid overwhelming Reddit’s servers — an important ethical consideration in web scraping.
Total collected: 1,218 posts spanning 2010 to 2026.
The collection was not filtered for relevance at this stage — that happens in subsequent steps.
Figure 1 — Post Volume by Year
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Year Posts Note
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2020 4 COVID lockdowns — people stayed home
2021 13
2022 12
2023 29
2024 76 Growing awareness, more community posts
2025 201 Dominant year — most reliable data
2026 36 Partial year (data collected Feb 2026)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The 2020 dip is notable — it directly reflects COVID-19 lockdowns, when street safety concerns were largely replaced by public health concerns. The dramatic 2025 spike reflects both Reddit’s growing user base and the increased volume of safety discussions in Chicago’s online communities.
Once we had the posts, we needed to know which Chicago neighborhood each post was about. This is not trivial — most posts do not have GPS tags, and authors may mention a neighborhood casually in the middle of a longer post.
The approach we used is called Gazetteer-Based Location Extraction — a form of Named Entity Recognition (NER), the natural language processing task of identifying and classifying named things (people, places, organizations) within text. General-purpose NER tools are trained on broad, formal text and typically fail on hyper-local place names, which is exactly what we found: standard models could not recognize Chicago neighborhood names like “Pilsen” or “Back of the Yards.” Building a custom, domain-specific gazetteer solved this gap.
A gazetteer is simply a geographic dictionary — a predefined list of place names. We built a custom Chicago gazetteer containing all 80+ official Chicago neighborhood names, including common variants and popular names (e.g. both “Lakeview” and “Lake View”). For each post, we scan the full text using regular expression pattern matching — a precise text-searching technique that finds exact word matches while respecting word boundaries.
The word boundary constraint is important. Without it, searching for
“Lake” would incorrectly match “Lakeshore Drive.” The word boundary
pattern \bLake View\b ensures we only match the complete
neighborhood name.
# Simplified version of what the code does
for neighborhood in chicago_neighborhoods:
if re.search(r'\b' + neighborhood + r'\b', post_text, re.IGNORECASE):
tag post with this neighborhoodWe also added a context filter for ambiguous names. “Austin” exists as both a Chicago neighborhood and the capital of Texas. “Beverly” exists as both a Chicago neighborhood and a common first name. For these ambiguous names, we only accept the match if the word “Chicago” also appears somewhere in the post text — confirming the post is about the Chicago location.
Result: 499 out of 1,218 posts were tagged with at least one Chicago neighborhood.
The 719 posts without neighborhood tags were not discarded from our understanding of the project but were excluded from neighborhood-level analysis — they could not contribute to a per-neighborhood score without a location.
Figure 2 — Top 10 Most Mentioned Chicago Neighborhoods
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Neighborhood Posts % of 499 located posts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Loop 135 27.1%
Lincoln Park 67 13.4%
Lakeview 54 10.8%
Logan Square 54 10.8%
River North 45 9.0%
West Loop 41 8.2%
Uptown 39 7.8%
Wicker Park 37 7.4%
Hyde Park 35 7.0%
Rogers Park 31 6.2%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The Loop’s dominance (135 posts) reflects its status as Chicago’s most discussed area — the downtown core where tourists, commuters, and residents all converge. This high volume makes Loop data statistically robust. Conversely, neighborhoods like Burnside or Fuller Park had fewer than 3 posts — not enough to draw meaningful conclusions, so they were flagged as “Insufficient Data” rather than assigned a score.
Before running sentiment analysis, we extracted an additional signal from each post — a safety relevance score based on a domain-specific lexicon.
A lexicon in Natural Language Processing is a predefined list of words with assigned meanings. We manually curated a list of 40 safety-related keywords chosen to reflect the specific language people use when describing urban safety concerns:
unsafe, harassment, harassed, followed, scared, scary,
avoid, dangerous, danger, attack, attacked, mugged,
robbery, threat, threatened, afraid, fear, dark, alone,
sketchy, catcall, creepy, stalked, knife, gun, shooting,
assault, uncomfortable, uneasy, intimidating, grabbed,
chased, aggressive, threatening, suspicious, worried,
terrified, horrified, traumatized
The design of this lexicon reflects a key insight: standard sentiment dictionaries are built for general use, and they miss domain-specific safety signals. The word “dark” is not inherently negative in a general dictionary — darkness is neutral. But in the context of a post about walking home at night, “dark” is an unmistakable safety signal. The word “alone” is similarly neutral in general usage but strongly safety-relevant in urban navigation contexts. Our custom lexicon captures these domain-specific signals that a generic tool would miss.
For each post, we count how many of these keywords appear. This count becomes the post’s safety score. A post with seven safety keywords is more safety-relevant than a post with one, even if both have the same sentiment label.
This safety score served two purposes: helping us surface the most safety-relevant posts for manual review, and contributing to our understanding of the intensity of concern within each neighborhood.
Sentiment analysis is the Natural Language Processing task of classifying the emotional tone of a piece of text. For HerWay, we needed to go beyond simple positive/negative classification — we needed to distinguish between three specific states that are meaningful for safety communication:
The model: CardiffNLP Twitter RoBERTa
We used a pre-trained transformer model called
cardiffnlp/twitter-roberta-base-sentiment, published by the
NLP research group at Cardiff University and available on HuggingFace, a
standard platform for sharing machine learning models.
Understanding why we chose this specific model requires a brief explanation of what a transformer model is.
Traditional language models read text word by word, left to right. By the time they reach the end of a sentence, earlier context has faded. Transformer models, introduced by Vaswani et al. in 2017, read the entire sentence simultaneously and compute relationships between every word and every other word. This attention mechanism allows the model to understand that “don’t feel safe” is negative — it connects “don’t” to “safe” across the sentence rather than evaluating each word in isolation.
RoBERTa (Robustly Optimized BERT Pretraining Approach) is a refined version of Google’s BERT transformer, developed by Facebook AI. The Cardiff NLP team took RoBERTa and fine-tuned it on 58 million tweets — meaning they continued training it on a massive dataset of informal social media text, teaching it to understand slang, abbreviations, emoticons, and the casual register that characterizes social media writing.
We chose this model specifically because Reddit text shares those informal characteristics. A model trained only on news articles or academic writing would systematically misclassify Reddit posts that use colloquial language, contractions, and community-specific references.
The model was applied to each of the 499 located posts. For each post, it returned: 1. A label: LABEL_0 (Negative/Fear), LABEL_1 (Neutral/Concern), or LABEL_2 (Positive/Reassuring) 2. A confidence score between 0 and 1 indicating how certain the model was
Figure 3 — Overall Sentiment Distribution (499 posts)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sentiment Posts Percentage
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Neutral/Concern 223 44.7%
Positive/Reassuring 155 31.1%
Negative/Fear 121 24.2%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total 499 100.0%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The distribution is notable. The plurality of posts (44.7%) are neutral — people asking questions, seeking advice, or sharing information without strong emotional valence. This reflects how Reddit actually functions: as a community Q&A platform as much as a storytelling one. Positive/Reassuring posts (31.1%) outnumber Fearful posts (24.2%), which is itself an interesting finding — the dominant narrative in Chicago Reddit communities about neighborhood safety is not predominantly fearful.
Limitations of the model: We did not conduct a formal accuracy evaluation with a held-out labeled test set, which is a methodological limitation. Manual review of a sample of outputs suggested strong performance on clear cases (an explicit incident report, an enthusiastic neighborhood endorsement) but some inconsistency on ambiguous posts — particularly those using sarcasm or those that mention safety only peripherally. Future work should include a formal evaluation with community members serving as human annotators.
With sentiment labels assigned to each post, we aggregated at the neighborhood level. For each neighborhood, we computed a fear ratio:
Fear Ratio = Number of Fearful Posts / Total Posts Mentioning the Neighborhood
For example, Logan Square: - 54 posts total - 8 classified as Negative/Fear - Fear Ratio = 8 / 54 = 0.148 (14.8%)
The fear ratio is a proportional measure — it tells us what fraction of community discourse about a neighborhood expresses fear, regardless of how many total posts exist. This makes it comparable across neighborhoods with very different post volumes.
We applied a minimum threshold: neighborhoods with fewer than 3 posts were excluded from scoring and labeled “Insufficient Data.” A single fearful post out of one total post produces a fear ratio of 100% — which is statistically meaningless. The 3-post threshold is conservative but ensures our scores have at least minimal statistical grounding.
Result: 60 neighborhoods with meaningful Reddit safety signals.
Beyond the core fear ratio, we conducted three additional analyses that enriched our understanding of the data:
Time Analysis — When Does Fear Peak?
We extracted the hour of each post from its timestamp and classified posts as Night (8pm–4am), Evening (4pm–8pm), or Day (4am–4pm). The fear rate at night was 25.0% compared to 23.8% during the day — a modest but consistent difference. More striking were neighborhood-level patterns: Englewood showed a 67% night-time fear rate, compared to 17% for Humboldt Park. This temporal dimension is directly relevant to HerWay’s use case — a user asking “Is it safe to walk here?” needs an answer that accounts for time of day.
Gender Analysis — Women’s Safety Specifically
A core motivation for HerWay is that women experience urban safety differently from the general population. To test this, we built a gender perspective detector — a set of keywords indicating that a post was written from or about a female perspective (“woman”, “women”, “female”, “as a woman”, “catcall”, “solo female”, “street harassment”, etc.).
Figure 4 — Fear Ratio by Perspective
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Perspective Posts Fear Ratio
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Female perspective 151 28.5%
Male perspective 98 23.5%
Neutral/Unknown 250 22.0%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Female-perspective posts express fear at a rate of 28.5% — nearly 6 percentage points higher than the overall rate and over 6 points higher than male-perspective posts. At night specifically, the female night-time fear rate was 33.3% compared to 19.5% for male-perspective posts. These findings are statistically consistent with existing research on gendered urban safety experiences and validate HerWay’s women-centered design.
Temporal Trend Analysis — Is Chicago Getting Safer?
Using post timestamps spanning 2010 to 2026, we tracked fear ratio year over year. Despite a 7x increase in post volume between 2023 and 2025 (from 29 posts to 201), the fear ratio actually declined from 24% in 2023 to 20% in 2025. This suggests that as more people discuss Chicago neighborhoods on Reddit, the balance of discourse is shifting toward more reassuring voices — though we note that the 2025 spike in volume may partly reflect broader Reddit growth rather than a genuine change in community sentiment.
TF-IDF Keyword Analysis — What Makes Each Neighborhood Unique?
Beyond our predefined safety lexicon, we applied TF-IDF (Term Frequency-Inverse Document Frequency) to identify words that are uniquely associated with each neighborhood’s Reddit discussion, relative to all other neighborhoods. TF-IDF is a statistical technique that weights a word highly if it appears frequently in one neighborhood’s posts but rarely across all neighborhoods — surfacing the distinctive vocabulary of each area rather than common words that appear everywhere.
This produced neighborhood-specific word profiles — for example, words uniquely associated with Loop discussions versus those uniquely associated with Rogers Park — which feed into the chatbot’s ability to give contextually specific answers.
Chicago’s 77 official community areas have formal names defined by the city — “Lake View”, “West Town”, “Lower West Side.” Reddit users, however, use neighborhood names as they know them — “Lakeview”, “Wicker Park”, “Pilsen.” These do not always match. Wicker Park is technically part of the official community area called West Town. Pilsen is part of Lower West Side. Chinatown is part of Armour Square.
Before merging, we built a name mapping dictionary that translates between popular Reddit names and official community area names. This allowed Reddit data about “Wicker Park” posts to be correctly associated with the official “West Town” community area that appears in crime and 311 datasets.
The three data sources arrived in incompatible scales. Crime incident counts ranged from 208 (Burnside) to 11,056 (Austin). Reddit fear ratios ranged from 0 to 1. 311 complaint counts ranged from hundreds to thousands. You cannot add these directly — a crime count of 11,056 would completely overwhelm a fear ratio of 0.35 simply because of the difference in scale.
We applied min-max normalization to each source independently:
Normalized Value = (Value - Minimum) / (Maximum - Minimum)
This transforms every value to a scale of 0 to 1, where 0 represents the neighborhood with the lowest value on that measure and 1 represents the neighborhood with the highest. Austin’s 11,056 crime incidents become 1.0. Burnside’s 208 become 0.0. Everything else falls proportionally in between.
After normalization, all sources are on a common 0–1 scale and can be meaningfully combined.
We combined the five normalized signals using a weighted linear combination:
Combined Score =
(Crime Incidents × 0.40)
+ (Reddit Fear Ratio × 0.25)
+ (Violent Crime % × 0.20)
+ (311 Complaints × 0.10)
+ (Street Lighting Complaints × 0.05)
Figure 5 — Weighting Scheme
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Signal Weight Rationale
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Crime incident count 40% Most objective, data-rich source
Reddit fear ratio 25% Lived experience, fills gaps in
official data
Violent crime percentage 20% Nature of crime matters as much
as volume — assault ≠ theft
311 complaints 10% Infrastructure signal, indirect
Street lighting complaints 5% Specific women's safety concern,
partially captured in 311
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Crime receives the highest weight (40%) because it is the most objective and data-rich source — thousands of recorded incidents per year, systematically collected by the Chicago Police Department. Violent crime receives a separate 20% because the nature of crime matters, not just its volume. A neighborhood with 5,000 bicycle thefts is categorically different in terms of personal safety from one with 5,000 assaults.
Reddit receives 25% — meaningful enough to genuinely influence neighborhood rankings, but not so dominant that sparse data from a small number of posts can override thousands of crime records. 311 complaints receive 10% as an indirect infrastructure signal — broken lights and abandoned buildings correlate with safety but do not measure it directly. Street lighting gets its own 5% specifically because poor lighting is a distinctive concern for women walking alone at night.
We are transparent that these weights represent informed design judgment, not statistical optimization. A future iteration could use machine learning methods like Principal Component Analysis to derive weights from the data itself. For this research prototype, we chose transparency and interpretability over complexity.
Based on the combined score, each neighborhood is classified:
Score ≥ 0.65 → High Risk
Score 0.40–0.65 → Medium Risk
Score < 0.40 → Lower Risk
Figure 6 — Final Risk Distribution (77 neighborhoods)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Risk Level Neighborhoods
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
High Risk 3
Medium Risk 26
Lower Risk 48
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total 77
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Beyond the risk label, we added a Source Agreement Signal — a feature that compares the Reddit fear ratio with the normalized crime score and reports whether the two sources agree or diverge:
High Reddit fear + High crime score → "Both sources signal concern"
Low Reddit fear + Low crime score → "Both sources suggest lower risk"
High Reddit fear + Low crime score → "Community feels more unsafe
than data suggests"
Low Reddit fear + High crime score → "Data shows risk but community
feels relatively calm"
This divergence signal is one of HerWay’s most distinctive contributions. It captures something neither source could reveal alone — the gap between measured reality and lived perception. A neighborhood where community perception is more fearful than crime data would predict may be experiencing unreported harassment or infrastructure failures. A neighborhood where crime data is high but community perception is calm may be in a period of genuine improvement that official statistics have not yet fully reflected.
Figure 7 — Top 5 Neighborhoods by Combined Safety Score
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Neighborhood Score Risk Level Reddit Fear Crime
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Austin 0.772 High Risk 34.8% 11,056
Greater Grand Crossing 0.695 High Risk 100.0% 5,992
Auburn Gresham 0.672 High Risk 100.0% 5,778
Chicago Lawn 0.623 Medium Risk 100.0% 4,522
South Shore 0.604 Medium Risk 50.0% 7,963
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Austin ranks highest (0.772) driven primarily by the highest crime count in Chicago (11,056 incidents) combined with a substantial Reddit fear ratio of 34.8%. Greater Grand Crossing and Auburn Gresham have 100% Reddit fear ratios but from very small sample sizes (3 posts each) — a reminder that high fear ratios from sparse data must be interpreted cautiously, which is why crime data’s 40% weight appropriately anchors the score.
Existing tools for assessing neighborhood safety in Chicago tend toward one of two extremes: either a single composite score that collapses complex, multi-dimensional data into a number, or raw open data portals that require significant technical literacy to interpret. Neither approach serves the everyday user trying to make an informed decision about where to live, visit, or move through the city.
HerWay was designed around a different premise: that the most useful insight is not a score but a comparison — specifically, the comparison between what crime data reports and what community members actually experience and express. This gap between official records and community sentiment is the core analytical concept of the project.
The chatbot component of HerWay operationalizes this concept as a conversational interface. Rather than presenting a dashboard that users must interpret, HerWay allows users to ask questions in natural language and receives responses that synthesize across three independent data sources. The system is designed to surface non-obvious patterns — particularly cases where community concern and reported crime do not align — and to present this information in plain, non-stigmatizing language.
A deliberate ethical constraint governs all responses: HerWay never labels a neighborhood as safe or unsafe. Crime patterns reflect systemic conditions — historical investment, policing decisions, socioeconomic factors — not the character of communities or their residents. The system is designed to inform, not to judge.
HerWay’s knowledge base is built from three data sources, each covering all 77 Chicago community areas:
At runtime, these three CSVs are loaded once at startup and
structured into a unified Python dictionary keyed by community area
name. Each entry contains three sub-dictionaries — crime,
reddit, and s311 — holding the respective
attributes for that community. This structure is referred to throughout
the codebase as the knowledge base.
knowledge_base = {
"Austin": {
"crime": { "total_incidents": 11056, "violent_pct": 41.4, ... },
"reddit": { "total_posts": 18, "fear_ratio_pct": 34.8, ... },
"s311": { "total_requests": 4821, "resolution_days": 17.2, ... }
},
...
}A deliberate architectural decision was made against a Retrieval-Augmented Generation (RAG) pipeline. RAG involves embedding documents into a vector store and retrieving relevant chunks at query time — a powerful approach for large, unstructured corpora. However, the HerWay knowledge base is small (77 communities, structured tabular data) and fully fits within a single GPT-4o context window. Direct context injection — passing the relevant neighborhood profile or citywide summary table directly into the prompt — is simpler, more transparent, and eliminates the retrieval error modes that RAG introduces.
The following diagram illustrates the end-to-end flow of the HerWay chatbot pipeline, from user input to response.
Figure 1: HerWay Chatbot Pipeline
flowchart TD
A[User Question] --> B[Neighborhood Detection]
B -->|Match found| C[Neighborhood Profile]
B -->|No match| D[Citywide Summary]
C --> E[Prompt Assembly]
D --> E
F[System Prompt] --> E
G[Session History] --> E
E --> H[Azure GPT-4o]
H --> I[Response]
A user question first passes through neighborhood detection, which attempts to identify one or more Chicago community areas referenced in the input. If a match is found, the corresponding neighborhood profile is retrieved from the knowledge base; if not, a citywide summary table covering all 77 communities is used instead. The selected context, system prompt, and rolling session history are then assembled into the final prompt and passed to Azure GPT-4o, which generates the response.
When a user submits a question, the system first attempts to identify which Chicago community area(s) are being referenced. Detection proceeds in two steps:
difflib.get_close_matches is applied with a
similarity cutoff of 0.6 (60% Ratcliff/Obershelp similarity). This
handles common variations such as “Wicker Pk” for “Wicker Park” or
misspellings.If no neighborhood is detected, the system falls back to a citywide summary — a compact table of all 77 communities with key attributes across all three sources — allowing GPT-4o to answer comparative or citywide questions without hallucinating.
The behavior of HerWay is governed by a system prompt passed to GPT-4o at the start of each conversation. The prompt encodes the following design decisions:
Three-source synthesis. The model is instructed not to report each data source sequentially, but to weave all three into a single coherent response. This prevents the “crime paragraph, then Reddit paragraph, then 311 paragraph” pattern that produces report-like output rather than conversational insight.
Perception gap reasoning. The core analytical instruction. The model is explicitly told to look for disconnects between crime data and community sentiment, and to lead its answer with that gap when one exists:
“The most valuable insight you can offer is the GAP between what crime data shows and what the community actually reflects. When community concern is high but crime numbers are moderate, that gap is the most important thing to surface.”
Scenario reasoning. When a user provides personal context — mode of transport, time of day, purpose of visit — the model uses that context to decide what to emphasize from the data. No rigid variable extraction is performed; the model reasons freely from the user’s description.
Language constraints. The model is instructed to avoid charged or stigmatizing language. Words such as “safe,” “unsafe,” “dangerous,” “fear,” and “bad area” are prohibited. Neutral alternatives — “incident levels,” “community concern,” “reported activity,” “resident sentiment” — are specified.
Format constraints. Responses are constrained to 2–3 sentences of conversational prose. The model is instructed to write as if explaining something to a knowledgeable friend, not presenting findings. Numbers are used sparingly — only when they add emphasis, not as a data readout.
Conversation history. A rolling window of the last 4 turns (8 messages) is passed with each request, enabling follow-up questions within a session.
The evaluation below covers five categories of questions, assessing factual accuracy, response quality, and edge case behavior. Each category is followed by qualitative observations drawn from the test results.
Category 1: Single Neighborhood Profile
| Question | Expected Behavior | Result |
|---|---|---|
| “Tell me about Austin” | Surface crime volume, community sentiment, infrastructure conditions as a unified picture | Pass |
| “Tell me about the Loop” | Distinguish theft-heavy profile from violent crime; note high Reddit activity | Pass |
| “How bad is Englewood really?” | Respond without stigmatizing language; present data accurately | Pass |
Observations: The system handled single-neighborhood questions well across all three test cases, weaving crime, Reddit, and 311 data into a unified response rather than listing sources separately. Notably, the question “How bad is Englewood really?” — phrased in a way that invites a stigmatizing response — was answered in neutral, data-grounded language, consistent with the language constraints in the system prompt. No hallucinated statistics were observed; all figures cited were verifiable against the knowledge base.
Category 2: Perception Gap Reasoning
| Question | Expected Behavior | Result |
|---|---|---|
| “Which neighborhood has the biggest gap between how it feels and how it actually is?” | Identify and explain a community where concern ratio diverges from incident levels | Pass |
| “Is there any neighborhood where people are more concerned than the data justifies?” | Surface high concern ratio / moderate incident communities | Pass |
| “Where does the community feel more settled than the data might suggest?” | Surface low concern ratio / higher incident communities | Pass |
Observations: Perception gap reasoning is the core differentiator of HerWay, and the system performed consistently on all three questions in this category. The model correctly identified communities where Reddit concern diverged from reported incident levels in both directions — cases where concern outpaced crime and cases where it lagged behind. This category is the strongest demonstration of the multi-source synthesis approach: no single data source alone could produce these answers.
Category 3: Comparative Questions
| Question | Expected Behavior | Result |
|---|---|---|
| “How does community sentiment in Logan Square compare to Pilsen?” | Side-by-side comparison using Reddit and crime data | Pass |
| “Which has more night activity — Englewood or Austin?” | Compare night_crime_pct for both | Pass |
| “Compare how the city responds to complaints in Lincoln Park versus North Lawndale” | Compare 311 resolution days; surface any disparity | Pass |
Observations: The system handled cross-neighborhood comparisons accurately, drawing on the relevant attribute for each question without being explicitly told which metric to use. The 311 resolution days comparison is particularly notable — the disparity between wealthier and lower-income communities in city response time is a meaningful equity finding, and the system surfaced it clearly without being prompted to frame it that way.
Category 4: Time-Related Questions
| Question | Expected Behavior | Result |
|---|---|---|
| “Which neighborhood has the most crime on weekends?” | Use peak_day to identify weekend-heavy communities | Pass |
| “Where is night activity most concentrated compared to daytime?” | Use night_crime_pct to identify night-heavy communities | Pass |
| “Which area has the latest peak crime hour?” | Use peak_hour to identify latest activity | Pass |
Observations: Temporal questions were answered correctly using the appropriate attributes from the community crime profile. This category is relevant for context-dependent use — a user asking about late-night conditions gets a meaningfully different answer than one asking about daytime activity, which is a key capability for practical decision-making.
Category 5: Scenario Reasoning
| Question | Expected Behavior | Result |
|---|---|---|
| “I’m a grad student moving to Chicago, I’ll be taking the CTA late at night” | Weight night crime and infrastructure data; suggest relevant communities | Pass |
| “I’m visiting Chicago for a week and want to explore — I’m a bit nervous about going out alone” | Conversational, non-alarmist; focus on community activity levels | Pass |
| “Which neighborhood is best?” (no context) | Ask one clarifying question before answering | Partial |
Observations: The two scenario questions with user context were handled well — the system picked up on relevant signals (late night transit, solo exploration) and weighted the appropriate data attributes without being explicitly told to do so. The partial result on “Which neighborhood is best?” reveals a limitation in the clarifying question behavior: rather than pausing to ask for context, the system acknowledged the question was broad and proceeded to answer across multiple categories. While the response was technically useful, it did not follow the intended design of asking one targeted clarifying question before answering. This is a prompt adherence gap — the instruction exists in the system prompt but is not consistently enforced by the model when it can construct a plausible answer.
Category 6: Edge Cases
| Question | Expected Behavior | Result |
|---|---|---|
| “What’s the weather like in Logan Square?” | Decline gracefully with correct out-of-scope message | Pass |
| “How do I get to the Loop?” | Decline gracefully | Pass |
| “Which neighborhood has barely any data?” | Acknowledge data sparsity honestly | Pass |
| “Is Chicago safe?” | Handle broad citywide question without over-generalizing | Pass |
Observations: Out-of-scope questions were declined correctly with the appropriate message. The data sparsity question was handled honestly — the system flagged communities with limited Reddit data rather than fabricating sentiment signals, which is the correct behavior for a grounded system. The broad citywide question “Is Chicago safe?” is the most nuanced case: rather than refusing to answer or over-generalizing, the system correctly reframed the question around what the data can say — patterns vary significantly by community area, time of day, and crime type — without making a blanket judgment.
Limitations of the chatbot
HerWay’s final system brings together the complete research pipeline into an interactive web-based neighborhood awareness platform for Chicago. The platform integrates multiple urban datasets — crime records, 311 service requests, and Reddit-based community sentiment — into a single interface where users can explore neighborhoods both visually and conversationally.
The goal of the system is not to label neighborhoods as safe or unsafe, but to present a more contextual understanding of urban environments. Reported incidents, infrastructure conditions, municipal service demand, and community perception are all surfaced together so users can interpret how these signals interact rather than viewing them in isolation.
The HerWay frontend is built using React.js, allowing the application to be structured into modular and reusable interface components. Leaflet.js is used for map visualization, enabling geographic interaction with Chicago neighborhood data.
PapaParse is used to process CSV datasets directly in the browser, while GeoJSON files define the spatial boundaries of Chicago’s community areas. CARTO Dark Matter map tiles provide a clean, high-contrast visual background that improves readability and highlights data patterns effectively.
The system also integrates a REST API-based chatbot, which allows users to ask natural language questions and receive context-aware responses based on the underlying datasets.
The system begins by loading cleaned and aggregated datasets along with the Chicago neighborhood GeoJSON file. CSV data is parsed, neighborhood names are normalized, and the data is aligned with geographic boundaries.
Once merged, the dataset is stored in the application state and distributed across core frontend components. The map provides the geographic interface, the details panel presents neighborhood-level metrics, and the chatbot uses the selected neighborhood as contextual input for responses.
This creates a unified pipeline:
Cleaned datasets
↓
CSV parsing and normalization
↓
GeoJSON boundary matching
↓
Merged neighborhood data (all sources)
↓
Map visualization + details panel + chatbot
This pipeline ensures that all components operate on a consistent, synchronized representation of the data.
The interactive map serves as the central interface of HerWay. Each Chicago community area is represented geographically, allowing users to explore spatial patterns across the city.
Markers or geographic regions reflect activity levels through visual encodings. Marker size can represent the volume of incidents, service requests, or community discussions, while marker color represents overall classification.
Users can hover over a neighborhood to view a quick summary, click to access a detailed breakdown, or search directly for a specific area. This makes the system effective for both exploratory analysis and targeted lookup.
HerWay uses progressive information disclosure to manage complexity and improve usability. Users first see high-level summaries and can choose to explore deeper details as needed.
On hover, the system displays a concise summary including neighborhood name, incident counts, 311 request volume, and common issue types. On click, a detailed panel presents a full neighborhood profile containing:
This layered design allows users to move naturally from overview to detailed interpretation.
The chatbot introduces a conversational interface to the system. Users can ask natural language questions about neighborhoods, request comparisons, or explore specific concerns.
When a neighborhood is selected on the map, the chatbot automatically uses that selection as context, allowing responses to be directly tied to the user’s current focus. This creates a seamless connection between map-based exploration and conversational analysis.
The chatbot synthesizes multiple data sources into a single response, reducing the need for users to manually interpret different datasets. It is particularly effective in highlighting relationships between crime patterns, infrastructure conditions, and community sentiment.
The system explicitly communicates data availability and limitations. Neighborhoods with all three data sources are presented with complete profiles, while neighborhoods without Reddit coverage are clearly marked.
For these areas, the interface indicates that only official data is available. This ensures that users understand where insights are based on full multi-source data and where they rely on partial information.
Maintaining this transparency is important for responsible interpretation of the results.
HerWay transforms raw urban datasets into an accessible and interpretable neighborhood awareness platform. By combining 311 service requests, crime data, and community sentiment within an interactive map and chatbot interface, the system provides a multi-dimensional view of Chicago neighborhoods.
Rather than presenting isolated statistics, HerWay connects multiple signals into a unified experience that supports exploration, comparison, and contextual decision-making.
A rigorous technical report requires honest accounting of where the methodology makes assumptions and where results should be interpreted with caution.
Assumption 1 — Reddit represents community safety perception. We treat Reddit posts as a valid proxy for how people experience safety in Chicago neighborhoods. This assumes that Reddit users who post about safety are sharing genuine experiences, not amplifying secondhand fears or deliberate misinformation. We have no way to verify this from the data alone.
Assumption 2 — Keyword-based gender detection is accurate. We infer that a post is from a female perspective if it contains certain keywords. A post using “she” or “woman” could be written by a man talking about his partner. Our female perspective analysis is therefore an approximation, not a precise demographic filter.
Assumption 3 — The CardiffNLP model generalizes to Reddit text. The model was fine-tuned on tweets, not Reddit posts. While the informal register is similar, Reddit posts are typically longer and more structured than tweets. We did not formally evaluate classification accuracy on our specific dataset.
Limitation 1 — Sample size for many neighborhoods. Many Chicago neighborhoods had fewer than 10 Reddit posts in our dataset. Fear ratios derived from small samples are unreliable and should be weighted accordingly. Our minimum threshold of 3 posts is a practical floor, not a statistical guarantee of reliability.
Limitation 2 — Demographic bias in Reddit data. Reddit’s user base over-represents younger, more educated, English-speaking users. Safety experiences of elderly residents, non-English-speaking communities, and lower-income residents are systematically underrepresented.
Limitation 3 — Temporal snapshot. Our data was collected at a point in time. Neighborhood safety conditions change — revitalization, new businesses, changes in policing strategy, demographic shifts — and our model does not update dynamically.
Limitation 4 — Manual weight selection. Our 40/25/20/10/5 weighting scheme reflects reasoned judgment but not empirical optimization. Different defensible weight choices would produce different neighborhood rankings.
HerWay would benefit from closer collaboration with sociologists and urban planners for more principled weight selection, public health researchers for understanding the health consequences of infrastructure inequality, and community organizers from Chicago’s South and West sides to validate whether the platform’s signals align with lived experience on the ground. This project was completed within a single semester by three students without this kind of subject-matter input, and treating that input as a next step — rather than as validation we can claim already happened — is itself part of being honest about scope.
Building on the current prototype, the most valuable next steps are:
These technical findings directly support the high-level observations presented in the executive summary, particularly regarding time-based safety perception, gender differences in safety experience, and the divergence between community sentiment and official data. The Reddit data pipeline produced a meaningful, nuanced community safety signal for 60 of Chicago’s 77 neighborhood areas. When combined with crime and 311 data through a normalized weighted scoring system, this signal contributes to a neighborhood risk assessment that is both more complete and more honest about its uncertainties than any single data source could be.
The key technical conclusions are:
Gazetteer-based location extraction is more accurate than general NER for hyper-local neighborhood names — a finding with implications for any NLP project working with local geographic entities.
Domain-specific lexicons outperform general sentiment tools for safety-relevant signal extraction — words like “dark” and “alone” carry safety relevance that standard tools miss.
Transformer-based sentiment classification, even without custom fine-tuning on the target domain, produces meaningful signal for community safety analysis — the CardiffNLP model, fine-tuned on social media text, transferred well to Reddit’s informal register.
Female community members express safety concern at meaningfully higher rates than the general posting population (28.5% vs. 24.2%) — a finding that directly validates the need for gender-aware safety platforms.
Source agreement signals are as informative as the scores themselves — knowing where community perception and official data diverge tells users something that neither source could communicate alone.
Barbieri, F., Camacho-Collados, J., Espinosa-Anke, L., & Neves, L. (2020). TweetEval: Unified benchmark and comparative evaluation for tweet classification. Findings of EMNLP 2020, 1644–1650.
Cardiff NLP. (2021). Twitter-roBERTa-base for Sentiment Analysis. HuggingFace. https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment
City of Chicago. (2024). Chicago Crime Data. Chicago Data Portal. https://data.cityofchicago.org/Public-Safety/Crimes-2001-to-Present/ijzp-q8t2 [Accessed: June 2026]
City of Chicago. (2024). Chicago 311 Service Requests. Chicago Data Portal. https://data.cityofchicago.org/Service-Requests/311-Service-Requests/v6vf-nfxy [Accessed: June 2026]
Gebru, T., Krause, J., Wang, Y., Chen, D., Deng, J., Aiden, E. L., & Fei-Fei, L. (2017). Using deep learning and Google Street View to estimate the demographic makeup of neighborhoods. Proceedings of the National Academy of Sciences, 114(50), 13108–13113.
Hasan, M., et al. (2022). Detecting safety-relevant social media posts using BERT-based models. Information Processing & Management, 59(3).
Koskela, H., & Pain, R. (2000). Revisiting fear and place: Women’s fear of attack and the built environment. Geoforum, 31(2), 269–280.
Liu, B. (2012). Sentiment Analysis and Opinion Mining. Synthesis Lectures on Human Language Technologies. Morgan & Claypool Publishers.
Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M., Chen, D., Levy, O., Lewis, M., Zettlemoyer, L., & Stoyanov, V. (2019). RoBERTa: A robustly optimized BERT pretraining approach. arXiv:1907.11692.
Lum, K., & Isaac, W. (2016). To predict and serve? Significance, 13(5), 14–19.
Python Software Foundation. (2024). Python 3.x documentation. https://docs.python.org [Accessed: June 2026]
Reddit Inc. (2024). Reddit API Documentation. https://www.reddit.com/dev/api/ [Accessed: June 2026]
Solymosi, R., Bowers, K., & Fujiyama, T. (2018). Mapping fear of crime as a context-dependent everyday experience. Legal and Criminological Psychology, 23(2), 116–135.
Vaswani, A., Shazeer, N., Priya, N., Parmar, U., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention is all you need. Advances in Neural Information Processing Systems, 30.
Wang, H., Kifer, D., Graif, C., & Li, Z. (2016). Crime rate inference with big data. Proceedings of the 22nd ACM SIGKDD, 635–644.
Wolf, T., et al. (2020). Transformers: State-of-the-art natural language processing. Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations, 38–45.
unsafe, harassment, harassed, followed, scared, scary,
avoid, dangerous, danger, attack, attacked, mugged,
robbery, threat, threatened, afraid, fear, dark, alone,
sketchy, catcall, creepy, stalked, knife, gun,
shooting, assault, uncomfortable, uneasy, intimidating,
grabbed, chased, aggressive, threatening, suspicious,
worried, terrified, horrified, traumatized
Reddit Name Official Community Area
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Lakeview Lake View
Pilsen Lower West Side
Little Village South Lawndale
Bronzeville Douglas
Wicker Park West Town
Bucktown West Town
Ukrainian Village West Town
Gold Coast Near North Side
River North Near North Side
Streeterville Near North Side
South Loop Near South Side
West Loop Near West Side
Chinatown Armour Square
Andersonville Edgewater
Ravenswood Lincoln Square
Grand Crossing Greater Grand Crossing
Garfield Park East Garfield Park
Cragin Belmont Cragin
Marquette Park Gage Park
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1 → Reddit scraping via public JSON endpoint
Output: 1,218 raw posts
Step 2 → Gazetteer-based location extraction
Output: 499 posts with neighborhood tags
Step 3 → Safety lexicon scoring (40 keywords)
Output: Safety score per post
Step 4 → Sentiment classification (CardiffNLP RoBERTa)
Output: Fearful / Neutral / Reassuring + confidence
Step 5 → Neighborhood aggregation + fear ratio calculation
Output: 60 neighborhoods with Reddit safety signals
Step 6 → Multi-source merge with crime + 311 data
Output: 77 neighborhoods with combined safety scores
Step 7 → Interactive map visualization (Folium / Leaflet.js)
Output: hersafe_final_map.html deployed via Vercel
Model: cardiffnlp/twitter-roberta-base-sentiment
Base architecture: RoBERTa (Liu et al., 2019)
Fine-tuning data: 58 million tweets
Labels: - LABEL_0 → Negative/Fear - LABEL_1 → Neutral/Concern - LABEL_2 → Positive/Reassuring
Accessed via: HuggingFace Transformers library (Python)
Hardware: Apple M-series CPU (no GPU required for inference on dataset of this size)