{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2601-03248","title":"STReasoner: Empowering LLMs for Spatio-Temporal Reasoning in Time Series via Spatial-Aware Reinforcement Learning","arxiv_id":"2601.03248","date":"2026-01-06","proceeding":null,"authors":["Juntong Ni","Shiyu Wang","Qi He","Ming Jin","Wei Jin"],"abstract":"Spatio-temporal reasoning in time series involves the explicit synthesis of temporal dynamics, spatial dependencies, and textual context. This capability is vital for high-stakes decision-making in systems such as traffic networks, power grids, and disease propagation. However, the field remains underdeveloped because most existing works prioritize predictive accuracy over reasoning. To address the gap, we introduce ST-Bench, a benchmark consisting of four core tasks, including etiological reasoning, entity identification, correlation reasoning, and in-context forecasting, developed via a network SDE-based multi-agent data synthesis pipeline. We then propose STReasoner, which empowers LLM to integrate time series, graph structure, and text for explicit reasoning. To promote spatially grounded logic, we introduce S-GRPO, a reinforcement learning algorithm that rewards performance gains specifically attributable to spatial information. Experiments show that STReasoner achieves average accuracy gains between 17% and 135% at only 0.004X the cost of proprietary models and generalizes robustly to real-world data.","url_abs":"https://arxiv.org/abs/2601.03248","url_pdf":"https://arxiv.org/pdf/2601.03248","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2601.03248","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2601.03248"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/LingFengGold/STReasoner","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":2,"ran_draft_wrong":1,"unverified":4},"by_repo_kind":{"found_in_text":{"samples":7,"ran":3,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"30d7eec482ebf6b1","entry":"repeat_kv","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":2,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"30d7eec482ebf6b1"}},{"code_sha256_prefix":"d61c483a3c2b3156","entry":"apply_rotary_pos_emb","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d61c483a3c2b3156"}},{"code_sha256_prefix":"b99eea6376d1e212","entry":"rotate_half","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/base_model/Config-Qwen2.5-14B-Instruct/modeling_qwen2.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b99eea6376d1e212"}},{"code_sha256_prefix":"e35f9ab0e0291372","entry":"extract_and_remove_ts","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"src/cli_demo.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/src/cli_demo.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e35f9ab0e0291372"}},{"code_sha256_prefix":"016bb4223f42d3eb","entry":"initialize_ts_encoder","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"initial_model.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/initial_model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"016bb4223f42d3eb"}},{"code_sha256_prefix":"f5f6f4d6529eb897","entry":"merge_by_placement","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"model_merger.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/model_merger.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f5f6f4d6529eb897"}},{"code_sha256_prefix":"6e8547739d8af7e7","entry":"sp_encoding","repo":"LingFengGold/STReasoner","repo_kind":"found_in_text","path":"base_model/Config-Qwen2.5-14B-Instruct/processing_qwen2_ts.py","file_url":"https://github.com/LingFengGold/STReasoner/blob/HEAD/base_model/Config-Qwen2.5-14B-Instruct/processing_qwen2_ts.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6e8547739d8af7e7"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}