[Case study]

Seoul Closure Risk

Net decline and store count in Seoul commercial districts

Seoul's commercial-district data includes quarterly openings and closures, from which food categories can be ranked by a net-decline rate (this project's own definition). If small-business support were allocated by such a ranking, it could influence where support goes. Korean restaurants have the highest net-decline rate overall in neighborhood commercial areas, though they rank first in only 3 of the 12 quarters taken one by one. After matching on store count the sign of the gap reverses, and the reversed difference does not hold at every size.

Approach
Observational analysis & forecasting
Data
67,475 cells (all four area types; the matching analysis uses the 34,647 neighborhood cells) · 12 labeled quarters · 10 food categories
Tools
Python, pandas, statsmodels, scikit-learn
Code
Code & outputs on GitHub ↗

RAW COMPARISON

+2.38pp

Raw gap, before matching

MATCHED ON CONDITIONS

−5.57pp

Sign reversed

SPLIT BY STORE COUNT

−13.6 → +1.8pp

Varies by store count

Gap in next-quarter net-decline rate · 34,647 neighborhood commercial-district cells. The +2.38 pp raw gap is Korean restaurants vs the other nine categories; −5.57 pp is vs matched control cells (7,043 pairs), which are mostly coffee/beverage (52.7%) and pub/bar (21.4%)

00

Executive summary

Summary of the project and main results

If support follows a net-decline ranking, the ranking is more closely related to store count than to closure risk. The category it ranks first overall in neighborhood commercial areas has a lower net-decline rate than comparable matched cells once cells are matched on size, though not at every size.

Raw comparison. Korean restaurants have the highest net-decline rate, 25.3% against 22.9% for the other nine food categories, pooled over 12 quarters in neighborhood commercial areas (first in only 3 of the 12 quarters taken individually). If support is allocated by a ranking like this, a gap like that could influence who receives support such as consulting or emergency loans. This is a hypothetical use case: net decline is this project's own label, and the page does not assume that any agency allocates support this way.

Tests of the raw gap

TestResultWhat it means
Permutation test · 1,000 shufflesp = 0.344The top category's lead over the all-ten average is +1.70 pp; picking the maximum of ten categories alone produces +1.49 pp on average, so 88% of that lead is what selecting the maximum alone would produce
Propensity matching · 7,043 pairs−5.57 ppAmong matched, comparable cells, the sign of the difference reverses
Woolf homogeneity testp < .0001The matched average combines estimates that differ across size bands: clearly negative in the three smallest bands, with intervals that include zero in the two largest
Stratum difference by store-count quintile: −13.6, −10.3, −4.9, −0.9 and +1.8 percentage points. The two largest bands' intervals include zero.
The third row in detail. Splitting the 7,043 matched pairs by store count, the matched difference runs from −13.6 pp in the smallest cells to +1.8 pp in the largest: clearly negative in the three smallest bands, with intervals that include zero in the two largest. The −5.57 pp average alone does not show that gradient. Detail in section 05.

Key findings

Store count alone accounts for almost all of the modeled reversal (−5.84 pp vs −6.01 pp with all four covariates held fixed). Foot traffic shows no significant association with net decline once store count and the other covariates are held fixed (AME +0.72 pp, p = 0.078; without store count it is strongly significant: AME +3.97 pp with foot traffic alone, +2.66 pp with area size and attracting facilities added, both p < 0.0001). It is associated with more openings and more closures, so the two largely cancel in the subtraction. The data do not show a busy district to be a safe one; the pattern is consistent with faster turnover.

The label decomposes exactly. Net decline = an event occurred × that event netting negative. Store count is strongly associated with the first term and has a small, non-significant coefficient in the second, so the label mainly reflects how often an opening or closure occurs rather than the direction of the balance once one occurs.

Seoul's change-indicator HL group (label in the source file: "contracting") has lift 0.937 for next-quarter net decline in the single validation quarter tested. The indicator grades each commercial area HH/HL/LH/LL by comparing the average operating months of its surviving and its closed businesses with Seoul-wide averages; HL means survivors' average is above Seoul's and closed businesses' is below. A lift below 1 means HL cells had a slightly lower net-decline rate than the average cell (24.3% against 26.0%). This tests one grade against this project's own label, which is not the indicator's published purpose, so it does not speak to the indicator's other uses.

The model's advantage appears at the operating point rather than in overall metrics. Top-50 precision is 0.780 against 0.380 for a store-count rule in the validation quarter, and the two lists overlap by only 4%, so 48 of the 50 flagged cells are ones the store-count rule does not list.

One result is not reported as performance evidence: the closure-count model's 0.915 category rank correlation, which rests on 10 categories in one validation quarter. Single-quarter rankings of the net-decline label were also noisy (see the checks in the methodology section).

Recommendation

Cell-level scores instead of category ranks

Net decline should not be used as a standalone measure of vulnerability. Closures per store can be shown beside it. If support were allocated by risk, a score at the level of one neighborhood commercial district × one food category is better supported by this analysis than an industry-level rank.

At a glance

Data 67,475 cells (all four area types) · 12 labeled quarters (2023 Q1 – 2025 Q4) · 10 food categories 5 datasets
Methods Propensity matching · doubly robust estimation · permutation testing · negative binomial regression · gradient boosting —
Performance Rolling validation across six quarters (33,223 out-of-fold cells, all four area types). This is the figure reported, rather than the single quarter used to pick the model AUC 0.666
Output Scored neighborhood-commercial-area cells for 2026 Q2, ranked by predicted closure risk 2,737

01

Overview

Scope of the analysis and why it matters

Seoul's Commercial District Analysis Service publishes store openings and closures for every commercial district × food category in its quarterly tables, and a separate change indicator (HH/HL/LH/LL, a grade per commercial district based on the operating months of surviving and closed businesses relative to Seoul-wide averages; see section 06). It does not publish a net-decline flag. This project defines a cell's next-quarter net decline as closures outnumbering openings. The use case below is an assumption: if a district officer ranked food categories by that flag when deciding where consulting and emergency loans go, the ranking would have the properties tested below. The page does not claim that any agency allocates support this way.

This project examines whether such a ranking reflects closure risk or mainly store count, using 13 quarters of Seoul commercial-district data (12 labeled), 67,475 cells across all four area types, ten food categories, with propensity matching, regression and forecasting methods.

This is a team project. This page covers my work on hypothesis H2, the second supporting question and the connected forecasting and operational evaluation; the project's main question and H1 were handled by other teammates and are outside this page.

The unit of analysis

A cell is one commercial district × one food category × one quarter. Everything on this page is measured at that unit unless stated otherwise.

Two similar words

Commercial district is one trade area in the commercial-district boundary table (1,650 of them). City district is one of Seoul's 25 boroughs. They are not interchangeable, and the difference matters for the recommendation.

Why it matters. If the gap comes from size confounding, a category-level allocation would be better replaced by cell-level allocation conditioned on size. If it does not, a category-level ranking would remain reasonable.

02

Business question

Assumed use case and research questions

Korean restaurants rank #1 on the pooled net-decline rate in neighborhood commercial areas (first in 3 of the 12 quarters taken one by one); the ranking is computed in this project from Seoul's opening and closure counts. They are also the largest category in neighborhood districts, averaging 21.3 stores per cell against 10.3 for the other nine. Larger cells have more opening and closure events, and more events give more opportunities for closures to exceed openings.

Main question

Does controlling for commercial scale and foot traffic change the apparent difference in net-decline risk between Korean restaurants and other food categories?

Stated as a hypothesis before the analysis: matching on those two variables will narrow the gap.

Sub-question

Among sales, foot traffic and store density, which commercial characteristics are associated with next-quarter net decline?

Foot traffic shows no significant association with net decline once store count and the other covariates are controlled (AME +0.72 pp, p = 0.078), though it is significant without that control.

Unit

cell

Cells (all four area types)

67,475

Labeled quarters

12

Positive rate

25.5%

03

Data

Sources, sample construction and data corrections

Source

Seoul Open Data Plaza · Commercial District Analysis Service tables (provider: Seoul Credit Guarantee Foundation; license: KOGL Type 1, attribution; copyright holder: Seoul Metropolitan Government), 2023 Q1 – 2026 Q1. Five datasets were merged into one panel, plus a sixth used only as an external benchmark:

DatasetWhat it contributes
Stores by Commercial DistrictStore counts, openings and closures, franchise split; the source of the label
Street-Level Population by Commercial DistrictFoot traffic by hour, weekday and age band
Commercial District BoundariesPolygon area, coordinates, district type
Attraction Facilities by Commercial DistrictAttracting-facility count and subway-station count per commercial district
Estimated Sales by Commercial DistrictEstimated sales value and transaction counts
Commercial District Change IndicatorThe city's own HH/HL/LH/LL grade per commercial district (average operating months of surviving and closed businesses compared with Seoul-wide averages). Used only as a baseline, in a single validation quarter, and never as a feature; testing it against net decline is not its published purpose

The dataset was used for educational portfolio purposes. This page documents the part of the team project that I analysed (see the scope note in the overview).

From 995,377 rows to 67,475

StageRowsWhy
Raw store table995,377All business categories
10 food categories × 13 quarters160,352Scope
Label constructible147,138Needs a following quarter to label against
5 or more stores per cell67,495See below
Analysis sample67,475Foot traffic and area valid; all four area types
Neighborhood commercial areas only34,647Raw gap, permutation, matching and stratified-ATT sample (7,043 matched pairs)

A five-store floor −54.1% of rows

The main reason is the label rather than the sales data. As an arithmetic illustration, in a three-store cell one closure is a third of all stores, against about 3% in a 30-store cell. Such differences reflect small sample size rather than district decline, and keeping those rows would let a model learn to pick out small cells rather than risky ones.

Sales missingness points the same way: 45.4% overall, 7.1% at five stores or more, 100% at two or fewer. A rate of exactly 100% looks like a rule rather than attrition, but what that rule is could not be confirmed: no published suppression threshold was located. It is reported as an observation, not a cause.

The filter is on store count, a covariate, not on missingness. The label is observed for every cell either way, so this narrows the population rather than selecting on the outcome. The cost is 54.1% of rows, which is why every conclusion carries the scope note “cells with five or more stores.”

A column that changed meaning would have distorted category comparisons

In the 2023–24 files, store_count is not total stores; it is non-franchise stores. The 2025 schema renamed it and introduced a separate total. Two identities confirm it at a match rate of 1.0000.

Correcting the mapping moved the sample from 55,795 to 67,475 (+20.9%), and the increase differed greatly by category: chicken +390% against Korean +2%. Left uncorrected, franchise-heavy categories would have been undercounted, which matters directly for a comparison between categories.

Sales excluded from the matching covariates

Missingness differs by category, and category is the treatment variable. Including sales would drop control cells selectively, which could bias the match itself.

A three-layer guard on every join

A duplicated key does not raise an error; it silently multiplies rows. Key uniqueness was asserted before merging, the merge was run with a declared relation, and the row count was checked after.

04

Methodology

Analysis design and the checks applied to each result

The pipeline

#StepDecision that mattered
1Define the labelNet decline in quarter t+1, built inside each (district, category) group so no cell borrows another's future
2Choose the test from the distributionNormality failed in all 39 groups across three comparisons (commercial-area type 4/4, service category 10/10, city district 25/25), so Kruskal-Wallis was used rather than ANOVA
3Test the gap against selectionPermutation test, because the treated category was selected as the maximum of ten
4Make the groups comparable1:1 propensity matching inside a caliper, exact-matched on quarter, without replacement
5Robustness checks on the resultDoubly robust estimation, counterfactual simulation, an alternative outcome label, and a split by size
6Predict and benchmarkRolling validation against a baseline ladder and against the city's own indicator

Why matching rather than regression adjustment

Limited overlap is the main concern. The two groups differed by a full standard deviation in store count. A regression can report a coefficient by extrapolating into the region where no comparable control cell exists. Matching does not extrapolate: a treated cell with no partner is dropped and counted, so lack of overlap appears as a visible count rather than a silent extrapolation.

Regression was still used: it enters as the doubly robust estimator alongside the match, so both numbers are reported.

Why gradient boosting margin within noise

Six candidates were compared. The gap between the naive baselines (always-average, previous-quarter status, category average; PR-AUC 0.26–0.29) and any model is large; the gap between the models is not, and neither is the gap between the best of them and the store-count rule (PR-AUC 0.418 against 0.388). Across the six rolling quarters, boosting beats logistic regression by 0.001 AUC on average (0.666 vs 0.665; logistic is higher in 2 of the 6, including the validation quarter), while the quarter-to-quarter standard deviation is 0.011.

The table below lists the five checks applied to the results. One of them led to a result not being reported as performance evidence.

Checks applied to the results

#Question checkedResultOutcome
V‑01The highest of ten categories was selected. Is ranking first distinguishable from the selection effect?Observed +1.70 pp against a null of +1.49 pp, p = .344not significant
V‑02Matching on store count does not by itself show that the groups are comparable; is covariate balance adequate after matching?Store count 1.00 → 0.044; all four covariates are below |SMD| < 0.1balance passed
V‑03A mean can hide differences that vary across size bandsWoolf p < .0001: clearly negative in three bands, zero-inclusive in twoheterogeneous
V‑04“Bigger cells are riskier” might only mean “bigger cells have events more often”Decomposed the label; the size dependence is concentrated in event frequencylabel mechanics
V‑05The closure-count model's category rank correlation was 0.915 (10 categories, one validation quarter, neighborhood cells)Not reported as performance evidence: it rests on ten categories in a single quarter. Separately, the net-decline label's single-quarter rankings are noisy (split-half 0.212 service category, 0.086 district, 0.035 district × category)not reported as evidence

For one of the five checks, the last, the number was not used as evidence because of its limited basis.

05

Analysis

Six analyses, A to F

A · The top rank is not distinguishable from selection

Shuffling the category label 1,000 times removes any relationship with the outcome while holding every group size fixed. Under that null, the top category still sits above the overall mean, because the maximum of ten finite samples tends to exceed their average. The test measures the size of that gap.

Observed gap

+1.70 pp

What chance produces

+1.49 pp

Permutation p

0.344

Explained by selection

88%

p = .344. Ranking first is not statistically distinguishable from the selection effect, and the evidence does not support a firm claim that Korean restaurants are intrinsically the riskiest. The matched estimate does not rest on the ranking, but Korean restaurants were still chosen as the top-ranked category, so it describes top-ranked cells rather than every category.

B · Propensity score matching

Korean cells were paired 1:1 with the nearest comparable non-Korean cell, exact-matched on quarter; 70.7% of Korean cells found a partner. The matched controls are not an average of the other nine categories: 52.7% are coffee/beverage cells and 21.4% pub/bar cells. Balance is checked before the outcome is read, so the design can be judged on its own terms:

CovariateBeforeAfterVerdict
log store count0.9990.044balanced
log foot traffic−0.4470.031balanced
log area−0.4730.036balanced
log attraction facilities−0.4610.038balanced

All four are below the |SMD| < 0.1 threshold, so the outcome comparison below uses this matched sample.

Diverging bars. The raw comparison sits at +2.38 points; propensity matching, doubly robust estimation, counterfactual simulation and an alternative label all sit between −5.57 and −8.71.
Four estimators with different assumptions, all negative (matching and doubly robust on 34,647 neighborhood cells; the counterfactual simulation on 31,875; the alternative label is a different outcome, so −8.71 pp is not the same quantity as the others). Matching balances covariates; the doubly robust estimator remains consistent if either the outcome model or the treatment model is correctly specified; the simulation substitutes covariate values directly; the alternative label replaces net decline with the next-quarter closure rate.

C · Differences across store-count strata

A mean can hide differences that vary across size bands, so the matched pairs were split by store-count quintile before the −5.57 pp average was interpreted.

Stratum ATT by store-count quintile: −13.6, −10.3, −4.9, −0.9 and +1.8 percentage points. The two largest bands' intervals include zero.
The 7,043 matched pairs split into store-count quintiles. The difference moves from −13.6 pp to +1.8 pp; the three smallest bands are clearly negative and the intervals of the two largest include zero. Woolf's homogeneity test gives p < .0001, which indicates that the odds ratios are not homogeneous across strata.

Possible explanation for the weaker difference in larger cells

An overall store-count imbalance does not explain it, since matching balanced store count across all pairs (post-match SMD 0.044). That balance is an average over every pair, however; it does not guarantee that the two sides are equal inside each size band, and the top band is wide (mean Korean cell 38.5 stores).

Korean restaurants carry a median of 16 stores per cell against 6–10 for every other category. Matching on the absolute count may therefore pair a cell that is small for a Korean cell with one that is large for its own category, and this mismatch would reverse as the bands climb.

One possible reading is that part of the −5.57 pp difference reflects a cell's size relative to its own category rather than a category effect: a cell far below its own category's norm may have a lower net-decline rate than one at or above its own.

Stated as a hypothesis, not a result. Five bands give five points. Confirming it means re-matching on within-category percentile rather than absolute count; this is listed as follow-up work and was not settled by this analysis.

Summary of the stratified result: Korean restaurants have markedly lower net-decline rates than matched cells in small cells, and the difference shrinks with size. In the fourth band (Korean cells with about 16–24 stores, mean 19.6) and the fifth (24–142 stores, mean 38.5) the interval includes zero. The −5.57 pp average alone does not show that gradient.

D · Which covariate accounts for the modeled reversal

Setting one covariate at a time to its median in every neighborhood cell (31,875 cells) and re-predicting with the fitted model shows where the modeled reversal comes from:

Held fixedPredicted gap
Nothing held fixed (model's predicted gap; observed +2.27 pp on the same cells)+3.06 pp
Store count only−5.84 pp
Foot traffic only+3.53 pp
Area only+3.20 pp
All four covariates−6.01 pp

Store count alone accounts for almost all of the modeled reversal. Adding the other three changes it by 0.17 pp. In the regression store count has the largest marginal effect (+14.28 pp, similar in size to the fast-food category dummy at +13.89 pp), while foot traffic is not significant once store count is in the model.

Foot traffic shows no net-decline association once store count is controlled (AME +0.72 pp, p = 0.078; +2.66 pp, p < 0.0001 when store count is left out). Two possible explanations are considered.

Paired negative-binomial coefficients for openings (green) and closures (rose). Foot traffic pushes both up (+0.098, +0.053); store count and food-service share push them in opposite directions.
Openings and closures modelled separately. When both bars point the same way, the difference between them (which is what net decline measures) largely cancels (for foot traffic: +0.098 for openings, +0.053 for closures; an offset share of 1 − |0.098 − 0.053| / (|0.098| + |0.053|) gives about 70%). (Negative binomial, 31,875 neighborhood cells.)

Reason 1 · It cancels in the subtraction

Foot traffic is associated with more openings and more closures, and roughly 70% of the combined coefficient size cancels in the difference (offset share = 1 − |opening − closure| / (|opening| + |closure|)). The data do not show busy districts to be more dangerous; the pattern is consistent with higher turnover, which net decline does not distinguish.

Reason 2 · It is a proxy for location

Within the same cell over time, changes in foot traffic are not significantly linked to opening or closure counts (p = 0.865 and 0.963). The cross-sectional association may therefore reflect persistent location traits, for example access or district character, rather than foot traffic itself; rent is not in the data.

E · Decomposition of the net-decline label

Net decline can occur only if an opening or closure event occurred: a cell with no openings and no closures cannot have closures exceeding openings. The label therefore decomposes exactly, not approximately:

P(net decline) = P(an event occurs) × P(it nets negative | an event occurs)

Grouped bars by store-count band. Event rate rises steeply from 29% to 98%; the overall net-decline rate rises with it; the net-decline rate conditional on an event falls from 50% to 38%.
Blue climbs from 29% to 98% as cells get larger; this is the share of cells with any opening or closure. Red, the overall net-decline rate, follows it. Green, the net-decline rate among cells with an event, moves in the opposite direction. The overall net-decline rate follows the blue series (how often any event occurs) rather than the green series (the direction of the balance once an event occurs). (31,875 neighborhood cells.)

48.5% of these cells (15,451 of 31,875) recorded a zero because no opening or closure occurred (43.7% in the full 67,475-cell panel). A five-store cell has a 71% chance of no event in a quarter; a cell with 51 or more stores has a 98% chance of one.

Estimating store count's effect at each stage separately: it is concentrated in the first stage (coefficient +1.483) and small and not statistically significant in the second (+0.046, p = 0.114). After adjustment, store count is not shown to predict the direction of the balance once an event has occurred. The result therefore does not support “bigger cells are safer”; it indicates that the label mainly reflects how often an opening or closure occurs.

F · Differences in area-type sensitivity by category

Applying the test selected earlier (each category fixed, area types compared within it), the effect sizes range from 0.1202 down to 0.0002:

CategoryEffect size (ε²)Reading
Pub / bar0.1202Highly location-dependent
Cafe / beverage0.0652Location-dependent
Korean0.0607Location-dependent
…six categories between0.048 – 0.016Weak to negligible
Chicken0.0002Area type explains almost nothing

The two ends are ε² 0.1202 (pub/bar) and 0.0002 (chicken); the chicken value is statistically indistinguishable from zero (p = 0.355), so no ratio between them is quoted. Area type explains almost none of the variation in chicken shops' net-decline frequency (ε² = 0.0002), so area type is unlikely to be a useful basis for district-level targeting for this category; only the area-type classification was tested. One possible explanation is a high delivery share reducing location dependence, though nothing in this dataset measures delivery.

06

Results

Matched estimate, model performance, comparison with Seoul's change indicator and forecast

The matched ATT estimate

ATT

−5.57 pp

95% CI

−7.08 · −4.17

Pairs

7,043

Doubly robust

−6.00 pp

The interval comes from a commercial-area-level cluster bootstrap (853 commercial areas, 500 resamples); cells from the same commercial area recur across quarters and are not independent, and resampling them individually would understate the uncertainty. Across nine designs varying caliper width, replacement, exact-matching on quarter/district and seed, the estimate stays between −5.82 and −4.10 pp. A tenth setting that adds sales, which limits the sample to cells with observed sales (about 90%, 5,312 pairs), gives −3.65 pp; the sign is the same in all ten.

What −5.57 pp is an estimate of

An ATT, not an ATE: the average difference among the treated cells that actually exist (an adjusted association, not a proven causal effect), which matches the question of how the cells at the top of the ranking compare with similar cells. It is also restricted to the region of common support: 70.7% of treated cells were matched, and the unmatched 29.3%, which disproportionately include very large Korean cells, are excluded rather than extrapolated over.

Model performance

Aggregate ranking ability is only slightly better than store count alone (PR-AUC 0.418 against 0.388; AUC 0.669 against 0.654). The difference is larger when the model is used to select a short list, as shown below.

Top 50 · model precision

0.780

Top 50 · store-count rule

0.380

Smallest cells · model lift

1.548

Smallest cells · rule (mean over random tie order; range 0.73–1.34)

1.022

Precision among the top-K flagged cells in the validation quarter. The model starts at 0.780 against 0.380 for the store-count rule at K = 50; the gap is small by K = 200 (0.545 against 0.520) and 0.396 against 0.384 at K = 2,000. The dashed line marks the 26.0% positive rate.
Operating points on the validation quarter (2025 Q4 features, 2026 Q1 outcome; 5,479 cells, all four area types): the quarter the model was selected on, not a sealed test. Overlap between the two lists climbs from 4% at K = 50 to 85% at K = 2,000; at the top of the list they are almost entirely different cells.
Top 50 Of the top 50 cells, 39 had a net decline against 19 under the store-count rule (validation quarter), about twice as many overlap 4% 2.05×
Top 200 0.545 against 0.520: the advantage is already shrinking, so the cutoff K should be set from available capacity overlap 30.5% 1.05×
Top 2,000 0.396 against 0.384: when K is large the two lists become nearly the same (85% overlap) overlap 85% 1.03×

The 4% overlap at the top of the list indicates that the model is not simply reproducing the store-count ranking; if it were, the two lists would largely agree. Instead, 48 of the 50 cells it names are cells the store-count rule does not list.

Lift within store-count quintiles. The model's lift is above the store-count rule's 95% range in all five bands, and its average advantage over the rule is largest in the three smallest bands (0.53, 0.27, 0.29) and about 0.09 in the two largest (single validation quarter).
Within a size band, store count discriminates much less: the rule's lift is 1.02 to 1.19 in every band, against 1.17 to 1.55 for the model, and the model's lift stays above it. The margin is widest in the smallest bands.

Summary of model performance

net-decline model: rolling AUC 0.666 ± 0.011 over 6 quarters  ·  closure-count model (2,772 neighborhood cells, 2025 Q4 → 2026 Q1): top-decile lift 2.25× (store-count rule 2.18×), AUC 0.711 vs 0.705 for store count (+0.006)

The single-quarter validation figure is slightly higher, but the model was selected on that quarter, so it may be optimistic. The rolling number is the one reported, and the two agree to 0.003 (0.669 vs 0.666), though the rolling figure includes the validation quarter, so this is not an independent check.

Comparison with Seoul's published change indicator

Seoul grades each commercial district HH/HL/LH/LL by comparing the average operating months of its surviving businesses and of its closed businesses with the Seoul-wide averages in the same quarter. HL means survivors' average is above Seoul's and closed businesses' is below; the official description is that incumbent businesses in the area are competitive. The grade is published as reference information for business start-up and entry decisions, not as a net-decline forecast. This table tests one grade against this project's own label, which is not the indicator's published purpose. The source file has no category column, so each cell takes the grade of its commercial district (all ten food categories in a district share it).

Validation quarter: the 2025 Q4 grade joined to the 2026 Q1 outcome, 5,479 cells, all four area types. This is a single quarter.

Seoul's change indicatorCellsNet-decline rateLift
HL (label: “contracting”)97424.3%0.937
HH1,45223.3%0.899
LH79022.9%0.882
LL2,26329.4%1.133

HL cells (the source file's label is “contracting”) had a slightly lower next-quarter net-decline rate than the average cell (24.3% against 26.0%; lift 0.937, close to 1), so HL gave no useful signal as a screen for net decline in this quarter. This is one validation quarter, so 0.937 should not be read as clearly different from 1. The indicator was not designed for next-quarter prediction; because it is built from closed businesses' operating months, using it as a feature could make the evaluation circular or leak target information, so it is used only as a baseline.

Category-level forecast

Predicted closure rate per 100 stores for 2026 Q2 by category, with 95% intervals. Fast food highest at 5.55%, Korean restaurants lowest at 3.98% (tenth of ten) but first by predicted net-decline probability.
2,737 scored neighborhood-commercial-area cells for 2026 Q2. Intervals come from a commercial-area bootstrap (500 resamples of 874 areas) of the scored cells' predicted rates. The fitted model is not refit, so model error and misspecification are not included and true uncertainty is wider.

The forecast also illustrates how the two metrics differ. Rank correlation between the two predicted metrics (predicted closure rate and predicted net-decline probability, across the ten categories) is −0.370 (with only ten categories that is not distinguishable from zero, p ≈ 0.29). The category with the highest predicted net-decline probability finishes tenth of ten on predicted closure rate (point estimate; its interval, 3.94–4.01, overlaps pub/bar's 3.97–4.07). If support follows a net-decline ranking, the choice of metric could change who gets support.

07

Business insights

Implications of the results and proposed actions, under the assumed use case

① A net-decline ranking is closely tied to store count

The definition itself (closures outnumbering openings) can be met only in cells where events occur, which favours cells with many events. Korean restaurants' cells are large (21.3 stores per cell against 10.3 for the other nine), and holding store count fixed removes the modelled gap (+3.06 pp to −5.84 pp). The page does not split the top rank into a size part and a selection part: the 88% selection figure is measured against the all-ten average, the matched estimate against matched controls. In the single validation quarter tested, the HL grade of the city's change indicator was not a useful screen for next-quarter net decline either (lift 0.937, close to 1). Screening for net decline is not that indicator's published purpose, and the result should not be generalized to its other uses.

② Foot traffic and business turnover

Foot traffic is associated with both more openings and more closures. These data do not show a busy district to be a safe one; the pattern is consistent with fast turnover. And within a cell over time, changes in it are not significantly linked to openings or closures, so it may be standing in for fixed location traits rather than acting on its own.

③ The difference between Korean restaurants and matched cells depends on store count

Conditioned on measured circumstances, Korean restaurants have a lower net-decline rate than their matched controls in the three smallest size bands (−13.6 to −4.9 pp). In the two largest bands (Korean cells with about 16–24 stores, mean 19.6, and 24–142, mean 38.5) the interval includes zero. The difference depends on the combination of category and store count, which a category-level ranking cannot express.

④ Single-quarter city district × category rankings are not stable; the model was evaluated at the cell level

Ranked at city district × category from a single quarter (neighborhood cells, 2025 Q4 features, 2026 Q1 outcome), the rankings change when they are re-measured (split-half reliability 0.035 across 240 district × category cells). With six quarters pooled and only cells of at least 60 rows kept (97 cells) it is 0.259 (a different set of cells, so the two numbers are not a like-for-like gain). Cell-level scores are stored so the aggregation is possible, but a single-quarter ranking at that unit would be largely unreliable, so such a ranking is not reported.

⑤ The model's advantage is larger in smaller cells

On aggregate ranking it adds little over store count. Hold size constant and the store-count rule's lift falls to 1.02–1.19 while the model's stays at 1.17–1.55, with the widest margin in the smallest bands. The aggregate number alone would not show this difference.

Recommendations

01 Use cell risk scores rather than category rank, if support is allocated by risk

Who
Any district small-business office that allocates consulting or emergency loans by a category net-decline ranking (an assumed use case; no such rule is documented in this project)
What
If a category net-decline ranking is used, replace it with the top-K cell risk scores. Set K from the caseload an officer can actually contact, since precision falls as K grows.
Evidence
In the validation quarter, 39 of the model's top 50 cells had a net decline, against 19 for the store-count rule. The lists overlap by only 4%, so 48 of those 50 cells are not on the store-count list.
Caveat
This means the micro commercial district, not the city district. City district × category rankings were unstable in single-quarter data (split-half reliability 0.035 in one quarter; 0.259 for six pooled quarters among cells with at least 60 rows), so they are not shown.
How to verify
Two quarters later, compare supported cells against unsupported cells with similar risk scores as a comparison group

02 Show net decline together with closures per store

Who
Anyone building or quoting a net-decline ranking from open commercial-district data (net decline is this project's own label, not a published indicator; Seoul publishes openings, closures and the HH/HL/LH/LL change indicator)
What
Show closures per store beside the net-decline rate. The two rank the ten categories at −0.370 correlation (2026 Q2 forecast, from two different models; with ten categories not distinguishable from zero, p ≈ 0.29), so they do not agree on which categories are riskiest. In the single quarter tested, the HL grade (source label “contracting”) was also not a useful screen for next-quarter net decline, and it was not designed for that purpose.
Illustration
In the 2026 Q2 forecast Korean restaurants rank #1 on predicted net decline and #10 on predicted closure rate (model estimates, not observed outcomes)
How to verify
Ask dashboard users which categories are risky, before and after; or track how the figures get quoted in press coverage

03 Revise the foot-traffic advice in startup counselling

Who
District small-business centre counsellors; credit guarantee foundation consultants, where they advise prospective entrepreneurs on location
What
Where advice such as “choose a district with heavy foot traffic” is given, consider replacing it with “heavy foot traffic goes with more openings and more closures, which is consistent with fast turnover, so plan working capital accordingly.”
Possible effect
Possibly fewer under-capitalised openings in high-footfall districts (not tested here).
How to verify
12-month survival rate of counselled openings, before and after the revision

04 Match the type of support to the category's location sensitivity

Who
Programme designers, if they are choosing between district-level and business-level support
What
Location-sensitive categories (pub/bar, cafe, Korean) are candidates for location diagnostics and district consulting. Categories with little location dependence (chicken, ε² 0.0002; fast food, ε² 0.0161, not significant after Bonferroni correction) are candidates for cost-structure measures instead, such as delivery commissions, franchise terms and operating efficiency.
Expected effect
Avoids assuming district-level support will move categories whose net-decline frequency barely varies by area type (not tested as an intervention). The gap in area-type sensitivity between the two ends is large (ε² 0.1202 for pub/bar against 0.0002 for chicken, which is statistically indistinguishable from zero, p = 0.355).
How to verify
Compare outcomes of district-level support for high- and low-sensitivity categories over four quarters

08

Limitations

What this cannot support

Aggregated quarterly counts cannot say which shop closed, and matching only balances what was measured.

Heterogeneity across size bands

The matched difference runs from −13.6 pp to +1.8 pp across size bands: clearly negative in the three smallest, with intervals that include zero in the two largest (Woolf p < .0001). The −5.57 pp average alone does not show that gradient, so the stratum table should be reported with it.

Scope

Matched estimates: neighborhood commercial districts, cells with five or more stores, ten food categories. The prediction models were fitted and validated on all four area types. Developed districts and traditional markets need refitting. The treated match rate was 70.7%, and very large Korean cells are disproportionately among those left outside.

Unobserved confounding

Matching balances measured covariates. Rent, owner age, tenure and capitalisation are absent, so the results are adjusted associations rather than proven causal effects.

The unit of observation

Data arrives pre-aggregated to district × category × quarter, so which shop closed cannot be determined. Much of the variation in closure counts probably reflects individual circumstances, which are not in the data.

Sales missingness is undiagnosed

The handling is conservative (excluded from matching, never imputed), but it was not checked whether the residual missingness correlates with the outcome, or what the 100% suppression rule actually is. The ATT does not use sales, so the exposure is confined to the prediction model.

An undocumented covariate

The area field has no definition in the source. The values suggest full polygon area rather than commercial floorspace; this is an inference, not a fact.

No sealed test quarter

The validation quarter was also used to choose the model. Six-quarter rolling validation stands in and the two figures agree to 0.003, but a genuinely sealed quarter would be better practice.

Reproducibility

Matching uses one shared seed (42) and stable tie-breaking. In a fresh-kernel check of the notebooks, two full runs produced identical CSV outputs (the two figures added afterwards were not part of that comparison).

What would move this forward

RankWhat is neededWhat it unlocks
0No new data: re-match on within-category percentileTests whether the weakening of the difference in the largest bands is an artefact of matching on absolute store count. Cheapest open item, and the one most likely to change how −5.57 pp must be described
1Business-registry event historiesSurvival analysis instead of quarterly counts: “which shop, at what age” becomes answerable, and a risk window by tenure becomes actionable
2District-level rentExplains why store count matters at all. The available rent data is borough-level and has no discriminating power between commercial districts
3Delivery-platform shareTests whether the location-indifference of chicken and fast food is a delivery effect, which is currently only an inference
4Staggered programme rolloutsDifference-in-differences, a design that can account for some unobserved confounding rather than only naming it

09

Tools & Skills

What was used, and for what

Programming & data handling

Python pandas NumPy SciPy

Statistical testing

Hypothesis Testing Kruskal-Wallis Levene's Test Shapiro-Wilk Permutation Testing Effect Size (ε²) Woolf Homogeneity Test Bonferroni Correction Split-Half Reliability Spearman-Brown Correction Cluster Bootstrap

Matching and observational estimates

Propensity Score Matching Standardized Mean Difference ATT Stratified ATT Doubly Robust Estimation Counterfactual Simulation Common Support Sensitivity Analysis Simpson's Paradox Analysis

Modeling

scikit-learn statsmodels Gradient Boosting Negative Binomial Regression Offset Modeling Cell Fixed Effects Two-Stage Decomposition Baseline Ladder Rolling Temporal Validation

Model evaluation

ROC-AUC PR-AUC Brier Score Poisson Deviance Lift Precision at K Calibration

Visualization

Matplotlib

Engineering practices

Join Integrity Assertions Leakage Guards Schema Validation Reproducible Seeds Config-Driven Paths

10

Repository

Notebooks, code, and full write-up

Code & outputs on GitHub →

The repository contains twelve numbered Jupyter notebooks running end to end from the raw CSVs to the 2026 Q2 forecast and the figures (matching uses one shared seed (42) and stable tie-breaking; in a fresh-kernel check of the notebooks, two full runs produced identical CSV outputs, and the two figures added afterwards were not part of that comparison). It also contains the configuration module, the output tables and the full README write-up.