1. Executive Summary

The Problem — When Safety Is Not a Given

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.

What HerWay Is

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:

  • Community narratives — what people are posting about safety on Reddit
  • Official crime data — recorded incidents from the Chicago Police Department
  • City service requests (311 data) — infrastructure complaints like broken street lights and abandoned buildings

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.

Why This Matters

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.

What We Found

Across 77 Chicago neighborhoods analyzed using a combination of community data and official records, several findings stood out:

  • 3 neighborhoods — Austin, Greater Grand Crossing, and Auburn Gresham — were classified as High Risk based on combined signals from all three data sources
  • 26 neighborhoods fell into the Medium Risk category, and 48 were classified as Lower Risk
  • Fear expressed in Reddit community posts peaks at night (8pm–4am), directly validating HerWay’s core premise that time of day matters enormously for safety perception
  • Female community members express fear at a rate of 28.5% in their posts — significantly higher than the overall rate of 24.2% — confirming that women’s safety experiences in Chicago differ meaningfully from the general population
  • In several neighborhoods, community sentiment and official crime data diverge — places where people feel unsafe despite low crime counts, or feel relatively comfortable despite higher incident rates. This divergence is one of HerWay’s most distinctive insights

What We Did Not Solve — And Why That Matters Too

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.


2. Technical Details

2.1 Project Timeline

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.

2.2 Background and Context — How This Problem Is Typically Approached

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.

3. Data Sources and Methodology Overview

3.1 Overview of Data Sources

  • Reddit community data
  • Chicago crime data
  • 311 service request data

3.2 Why These Sources Were Chosen

  • Reddit = community perception
  • Crime = official reported incidents
  • 311 = infrastructure and livability signals

3.3 Data Cleaning and Preparation Overview

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.

3.4 Methodology Summary

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.


4. 311 Service Request Analysis

4.1. Introduction

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.

4.2. Why This Data is Used

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.

4.3. Data Cleaning and Preparation

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.

4.4 Analysis

4.4.1 Request Type Breakdown

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.

Request Type Breakdown
Request Type Breakdown

4.4.2 Top Neighborhoods by Request Volume

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.

Top Neighborhoods by Request Volume
Top Neighborhoods by Request Volume

4.4.3 Average Resolution Time by Type

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.

Resolution Time by Type
Resolution Time by Type

4.4.4 Submission Channel Breakdown

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.

Submission Channel Breakdown
Submission Channel Breakdown

4.5. Overall Interpretation

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.


5. Crime Data Analysis

5.1 Data Source and Collection

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.

5.2 Data Overview and Preprocessing

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

5.3 Exploratory Data Analysis

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 crime types citywide
Figure 2: Top crime types citywide

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: Incidents by hour of day
Figure 4: Incidents by hour of day

Figure 4: Total reported incidents by hour of day across Chicago (2025).

Figure 5: Incidents by day of week
Figure 5: Incidents by day of week

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 crime location types
Figure 6: Top crime location types

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: Incidents by neighborhood
Figure 1: Incidents by neighborhood

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 by community area
Figure 7: Violent crime percentage by community area

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 vs non-domestic crimes by neighborhood
Figure 3: Domestic vs non-domestic crimes by neighborhood

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:

  1. Raw incident counts are a poor standalone measure of community conditions. Volume, violent percentage, domestic percentage, and time patterns together tell a more complete and nuanced story than any single metric.
  2. The distinction between high volume and high concentration of violent crime is critical. A community with 1,000 incidents and 50% violent rate presents a fundamentally different picture than one with 10,000 incidents and 15% violent rate — yet both could be described as “high crime” without this distinction.
  3. Temporal patterns vary significantly by community. Peak hours, peak days, and night crime percentages differ enough across areas that time-of-day context changes the interpretation materially.
  4. Domestic crime is systematically less visible in public discourse, yet constitutes a significant share of incidents in several communities — a gap that has implications beyond this project for how crime is reported and perceived.

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.

5.4 Limitations of the Crime Dataset

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.


6. Community Data (Reddit Analysis)

6.1 Why Reddit?

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.

6.2 Data Collection

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/chicago
  • r/AskChicago
  • r/TwoXChromosomes
  • r/AskWomen
  • r/femalefashionadvice

The 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.

6.3 Location Extraction — Finding the Neighborhood

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 neighborhood

We 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.

6.4 Safety Signal Extraction — The Lexicon

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.

6.5 Sentiment Analysis — Classifying Emotional Tone

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:

  • Negative/Fear — posts expressing fear, warning others, or reporting an incident
  • Neutral/Concern — posts asking questions, expressing uncertainty, or seeking advice
  • Positive/Reassuring — posts saying an area is safe, sharing positive experiences, or countering fear-based narratives

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.

6.6 Neighborhood Aggregation — Computing the Fear Ratio

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.

6.7 Additional Analyses

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.


7 The Merged Dataset — Combining Three Sources

7.1 The Name Matching Problem

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.

7.2 Normalization — Making Sources Comparable

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.

7.3 The Weighted Score — Design Decisions and Rationale

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.

7.4 Risk Classification and the Validation Signal

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.


8. HerWay Chatbot

8.1 Motivation and Design Philosophy

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.

8.2 Knowledge Base Architecture

HerWay’s knowledge base is built from three data sources, each covering all 77 Chicago community areas:

  • Crime incident records (2025): Per-community aggregated profiles derived from the Chicago Data Portal raw crime data. Contains one row per community area with attributes including total incidents, crime types, violent and domestic percentages, arrest rate, peak hour, peak day, night crime percentage, top location type, and peak month.
  • Reddit community discussions: Posts about Chicago neighborhoods scraped from Reddit (2010–2026), processed to surface per-community sentiment metrics including total post volume, concern ratio, night-specific posts, women’s posts and fearful counts, top safety keywords, and actual post titles and text snippets. This source captures how residents and visitors perceive a neighborhood, independently of official records.
  • 311 service requests: Raw resident complaints filed with the City of Chicago in 2025, aggregated at runtime by community area. Unlike the other two sources which are pre-aggregated, this dataset is summarized at startup to derive complaint volume by type (street lights out, vacant buildings, abandoned vehicles) and average resolution time per community. This layer reflects the physical and infrastructural conditions of a neighborhood that crime statistics alone do not capture.

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.

8.3 System Architecture

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.

8.4 Neighborhood Detection

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:

  1. Exact string matching: Each known community name is checked against the lowercased question. If a match is found, it is used directly.
  2. Fuzzy matching fallback: If no exact match is found, Python’s 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.

8.5 System Prompt Design

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.

8.6 Evaluation

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

  • Session memory is ephemeral. History is maintained within a single session but does not persist across sessions. Returning users start from scratch.
  • In-memory session store. The Flask API stores session history in a Python dictionary in memory. This means sessions are lost on server restart and the system does not scale to concurrent users without a persistent session backend.
  • Knowledge base is static. The three CSVs are loaded at startup. The system does not reflect new crime reports, Reddit posts, or 311 complaints until the data is refreshed and the server restarted.
  • Data scope. The chatbot can speak to incident patterns, community sentiment, and infrastructure conditions. It cannot speak to rent, transit proximity, walkability, school quality, or other factors that inform residential decisions. When such questions arise, the system acknowledges this boundary.
  • Fuzzy matching limitations. The 60% similarity threshold for neighborhood detection may occasionally match incorrectly for very short or similarly-spelled community names.

9. System Architecture and Final Platform Integration

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.

9.1 Technology Stack

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.

9.2 Data Flow and System Pipeline

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.

9.3 Interactive Map Interface

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.

9.4 Progressive Information Display

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:

  • Risk level and combined safety score
  • Crime statistics, including total incidents, violent crime percentage, night crime percentage, peak time, and top crime types
  • 311 service data, including total complaints, street lighting outages, average resolution time, and most common complaint type
  • Community voice indicators, including Reddit fear ratio, sentiment distribution, top safety keywords, and representative post examples
  • Traveler guide, including data-driven safety tips, suggested times to visit, and transit-related context
  • Source agreement signal, indicating whether official data and community sentiment align or diverge

This layered design allows users to move naturally from overview to detailed interpretation.

9.5 Chatbot Integration

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.

9.6 Transparency and Data Completeness

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.

9.7 Final System Summary

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.


10 Assumptions and Limitations

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.

10.1 Interdisciplinary Gaps

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.

10.2 Future Directions

Building on the current prototype, the most valuable next steps are:

  • Multilingual support (Spanish, Mandarin) — to capture safety discourse in communities, such as heavily Spanish-speaking neighborhoods, that our English-only Reddit pipeline currently misses entirely.
  • Dynamic data ingestion — replacing the static, startup-loaded knowledge base with a pipeline that refreshes as new crime reports, Reddit posts, and 311 complaints come in.
  • Extension to additional U.S. cities — the architecture (data processing layer → merged neighborhood dataset → map and chatbot) was designed to be reproducible for any city with open crime data, a 311 portal, and an active Reddit community.
  • Nextdoor integration — Nextdoor is a more hyper-local, verified-resident platform than Reddit, but was excluded from this phase due to account and location-verification requirements that made systematic collection impractical.
  • Mobile application with real-time context — a mobile version could incorporate the user’s live location and time of day directly into the chatbot’s reasoning, rather than requiring manual neighborhood selection.

11 Conclusions

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:

  1. 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.

  2. Domain-specific lexicons outperform general sentiment tools for safety-relevant signal extraction — words like “dark” and “alone” carry safety relevance that standard tools miss.

  3. 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.

  4. 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.

  5. 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.


Bibliography

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.


Appendix

A. Safety Keyword Lexicon (Full List)

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

B. Reddit Name to Official Community Area Mapping

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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

C. Data Pipeline Summary

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

D. Model Information

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)