Stolen Stars: Symphony of Night Sky A Time-Series Investigation of Light Pollution Across Seven Indian Landscapes
Abhilasha Das · GitHub · LinkedIn
Biswarup Majumdar · GitHub · LinkedIn
St. Xavier's College (Autonomous), Kolkata
Artificial light at night (ALAN) has become one of the most pervasive yet least examined indicators of human development. This project investigates the temporal dynamics of nighttime illumination across seven ecologically and culturally diverse regions of India using satellite-derived radiance data from the NOAA/VIIRS Day/Night Band archive (2014 to 2024).
The analysis combines satellite remote sensing, geospatial infrastructure data, and rigorous statistical modelling to separate genuine anthropogenic illumination from natural optical interference, quantify the drivers of radiance change, and forecast future light pollution trajectories.
| Region | Coordinates | Character |
|---|---|---|
| Hanle | 78.96°E, 32.78°N | India's first Dark Sky Reserve, high-altitude Ladakh |
| Spiti | 78.07°E, 32.22°N | Himalayan valley with growing tourism pressure |
| Kutch | 70.03°E, 23.81°N | Arid salt flats, uneven development |
| Sohra | 91.73°E, 25.27°N | One of the wettest places on Earth (Cherrapunji) |
| Araku | 82.87°E, 18.33°N | Emerging ecotourism destination, Eastern Ghats |
| Wayanad | 76.13°E, 11.68°N | Ecotourism hotspot, Western Ghats |
| Varanasi | 82.97°E, 25.31°N | Dense urban centre, cultural anchor |
Each region is anchored to a fixed geographic coordinate within a standardised 20 km ecological buffer.
The project follows a six-stage analytical pipeline:
01 Data Downloading Raw VIIRS radiance + OSM + GEE variables
|
02 Cleaning & EDA Astronomical/atmospheric filtering (17-22% retention)
|
03 Data Preparation Monthly panel dataset construction
|
04 Trend & Changepoint STL decomposition + PELT structural break detection
|
05 Econometrics Pooled OLS, VAR models, Granger causality testing
|
06 Forecasting SARIMAX models with residual diagnostics
- STL Decomposition for separating trend, seasonality, and residual components
- PELT Change-Point Detection for identifying structural breaks in radiance trends
- Pooled OLS Regression with VIF and Breusch-Pagan diagnostics
- Vector Autoregression (VAR) with AIC-based lag selection
- Granger Causality Testing to assess temporal precedence between NDVI and radiance
- SARIMAX Forecasting with Ljung-Box residual validation
Data Cleaning: Strict filtering retained 17 to 22% of raw observations, reducing variance by up to 99.9% (Kutch) while preserving genuine radiance signals.
OLS Regression: Built-up fraction is the dominant predictor of nighttime radiance (coefficient = 41.39, p < 0.001, R² = 0.438). NDVI was not significant in the pooled model.
Granger Causality: NDVI Granger-causes radiance in 6 of 7 regions (p < 0.05). The exception is Wayanad, where rapid infrastructure growth dominates.
SARIMAX Forecasts: Models achieved white-noise residuals in 4 of 7 regions, confirming successful temporal signal extraction.
Stellar-Drift-Protocol/
|
|-- data/
| |-- raw/ # Unmodified VIIRS radiance, OSM, and GEE data
| |-- processed/ # Cleaned daily radiance per region
| |-- univariate_data/ # Single-variable formatted datasets
| |-- features/ # Final merged_panel_data.csv
| |-- regions_metadata.json # Region coordinates and definitions
|
|-- notebooks/
| |-- 01_Data_Downloading.ipynb
| |-- 02_Data_Cleaning_and_EDA.ipynb
| |-- 03_Data_Preparation.ipynb
| |-- 04_Trend_Seasonality_ChangePoint.ipynb
| |-- 05_Econometrics_VAR_Granger.ipynb
| |-- 06_SARIMA_Forecasting.ipynb
| |-- archive/ # Deprecated scripts (git-ignored)
|
|-- plots/
| |-- acf_pacf/ # Autocorrelation and partial autocorrelation
| |-- changepoint/ # PELT structural break visualizations
| |-- forecast_diag/ # SARIMAX forecast + residual diagnostics
| |-- radiance_comparison/ # Raw vs. cleaned radiance time series
| |-- stl_decomp/ # STL decomposition (trend, season, residual)
|
|-- docs/
| |-- code_organisation.md # Detailed pipeline documentation
| |-- Lunar_Project.docx # Project report
|
|-- .gitignore
|-- LICENSE # MIT License
|-- README.md
- Python 3.10 or higher
- A Google Earth Engine account (for
01_Data_Downloading.ipynb)
git clone https://github.com/AbhilashaxData/Stellar-Drift-Protocol.git
cd Stellar-Drift-Protocol
or
git clone https://github.com/Mr-Rup/The-Nocturnal-Tapestry.git
cd The-Nocturnal-Tapestry
pip install -r requirements.txt| Package | Purpose |
|---|---|
pandas, numpy |
Data manipulation |
matplotlib, seaborn |
Visualization |
statsmodels |
STL, SARIMAX, VAR, Granger, OLS, diagnostics |
ruptures |
PELT change-point detection |
osmnx |
OpenStreetMap infrastructure extraction |
geopandas, shapely |
Geospatial operations |
earthengine-api |
Google Earth Engine access |
- Authenticate with Google Earth Engine:
earthengine authenticate - Run the notebooks in numerical order (
01through06) - Review generated outputs in
plots/anddata/
Note: Notebook 01 requires active internet access and GEE authentication. Notebooks 02 through 06 can run offline using the data already present in
data/raw/.
See docs/code_organisation.md for a detailed breakdown of each notebook's inputs, operations, and outputs.
| Source | Variable | Access |
|---|---|---|
| NOAA/VIIRS DNB | Daily nighttime radiance | Google Earth Engine |
| Dynamic World | Built-up fraction | Google Earth Engine |
| MODIS MOD13Q1 | NDVI (vegetation index) | Google Earth Engine |
| OpenStreetMap | Road density, hospitality infrastructure | OSMnx (Python) |
If you use this work in your research, please cite:
Das, A., & Majumdar, B. (2026). Stolen Stars: Symphony of Night Sky.
St. Xavier's College (Autonomous), Kolkata.
https://github.com/Mr-Rup/The-Nocturnal-Tapestry.git
https://github.com/AbhilashaxData/Stellar-Drift-Protocol
This project is licensed under the MIT License. See LICENSE for details.
Built with curiosity, satellite data, and a lot of late nights spent studying the night. 🌙