PALM: Point-in-Time Adaptation for Financial Language Models
Organizations: LG AI Research
Abstract
Language models used in financial backtests suffer from look-ahead bias, as a model trained on text published after the study period has already observed the outcomes it is asked to predict. To handle this issue, point-in-time (PIT) language models are pretrained on chronologically filtered corpora and released as one checkpoint per calendar year, each with a documented cutoff. However, each additional year costs a full pretraining run, and whether that run is necessary has never been tested. In this paper, we show that the annual pretraining run is not necessary. We instead compare each checkpoint against the newer one that replaced it, and find that the newer checkpoint scores no better on the same evaluation window. Motivated by this observation, we propose PALM (Point-in-time Adaptation for financial Language Models), a simple yet effective alternative to annual pretraining that fits a low-rank adapter on text published before the decision date without modifying any pretrained weight. We further find that a small adapter is enough to add a new period to the knowledge an old checkpoint already encodes, and that this outperforms continued pretraining. We validate PALM on a decade of financial news and on various families of PIT models, whose cutoffs span two decades and whose sizes range from 1.3 to 4.2B. Code is available at: https://github.com/seunghan96/palm.
Figures & tables
| Line of work | Point-in-Time | Finance | Adaptation |
|---|---|---|---|
| Financial LLMs ( Ke et al., 2019 ; Lopez-Lira and Tang, 2026 ; Lee et al., 2026 ) | ✓ | ||
| PIT language models ( He et al., 2025a ; Kelly et al., 2026 ; Yan et al., 2026 ) | ✓ | ✓ | |
| Continued pretraining ( Lazaridou et al., 2021 ; Dhingra et al., 2022 ; Luu et al., 2022 ) | ✓ | ||
| Adapters ( Houlsby et al., 2019 ; Hu et al., 2022 ) | ✓ | ||
| PALM (Ours) | ✓ | ✓ | ✓ |
| Component | Setting |
|---|---|
| [1] Data | |
| Corpus | FNSPID financial news ( Dong et al., 2024 ) |
| Universe | 1,099 US tickers |
| Panel span | 2014 to 2023 |
| Target | Next-session return |
| [2] Models | |
| Suite | Scored | Eligible | Excluded cutoffs | ||
| Cutoffs | Cutoffs | ||||
| ChronoGPT | 26 | 1999–2024 | 21 | 1999–2019 | 2020 to latest |
| ChronoGPT-Instruct | 21 | 2004–2024 | 16 | 2004–2019 | |
| DatedGPT | 12 | 2013–2024 | 7 | 2013–2019 | |
| Total | 59 | — | 44 | — | 15 |
| Suite | Slope of IC per year | -value |
|---|---|---|
| ChronoGPT | +0.00004 | 0.40 |
| ChronoGPT-Instruct | +0.00011 | 0.12 |
| DatedGPT | +0.00034 | 0.55 |
| Pooled | +0.00007 | 0.14 |
| Backbone | IC | Return | Sharpe | Wins | |
|---|---|---|---|---|---|
| ChronoGPT | 7.50 | 8.13 | 1.42 | 20/21 (95%) | |
| PALM | 9.18 | 9.33 | 1.60 | ||
| ChronoGPT-Instruct | 9.28 | 8.90 | 1.52 | 14/16 (88%) | |
| PALM | 9.87 | 8.94 | 1.50 | ||
| DatedGPT | 5.51 | 2.98 | 0.55 | 6/7 (86%) | |
| PALM | 7.02 | 3.62 | 0.67 |
| Backbone: PIT-4B | IC | Return | Sharpe |
|---|---|---|---|
| w/o update | 4.38 | 4.08 | 0.72 |
| w/ continued pretraining | 4.48 | 4.30 | 0.77 |
| w/ PALM | 5.76 | 4.97 | 0.89 |
| Age of base | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| PALM | PALM | PALM | ||||
| 0 to 3 years | 6.58 | 7.71 | 6.69 | 6.70 | 1.17 | 1.13 |
| 4 to 6 years | 7.72 | 9.29 | 7.31 | 7.60 | 1.26 | 1.29 |
| 7 to 10 years | 7.97 | 9.23 | 8.57 | 9.78 | 1.47 | 1.66 |
| 11 years or more | 8.47 | 9.63 | 7.70 | 8.68 | 1.34 | 1.51 |
| Ticker | Headline | Shift | Return |
|---|---|---|---|
| The update raises the score | |||
| GCC | Commodity ETFs rally on the Ukraine war | ||
| VYM | The most popular equity income ETFs | ||
| TWLO | Three tech stocks in the sweet spot | ||
| The update lowers the score | |||
| NIO | Why Tesla, Nio and Nikola stocks fell | ||
| What was changed | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Gain | Wins | Gain | Wins | Gain | Wins | |
| (a) What the gain needs | ||||||
| Words scrambled, rank 2 | +0.48 | 59% | -0.24 | 52% | -0.05 | 43% |
| Words scrambled, rank 8 | -0.19 | 43% | -2.39 | 23% | -0.39 | 23% |
| (b) What it could reach | ||||||
| Text read past the date | +1.05 | 84% | +0.83 | 57% | +0.12 | 57% |
| Budget | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Gain | Wins | Gain | Wins | Gain | Wins | |
| 200 steps | +0.17 | 55% | +0.42 | 55% | +0.05 | 52% |
| 600 steps | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| 1200 steps | +1.29 | 84% | +0.69 | 55% | +0.08 | 52% |
| Rate | +0.14 | 59% | +0.23 | 66% | +0.02 | 61% |
| Decision date | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Gain | Wins | Gain | Wins | Gain | Wins | |
| 2019 | +1.09 | 87% | +1.46 | 74% | +0.18 | 71% |
| 2021 | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| 2022 | +0.47 | 66% | +0.31 | 47% | +0.03 | 45% |
| Projection | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Gain | Wins | Gain | Wins | Gain | Wins | |
| Attention | +0.63 | 74% | +0.01 | 49% | -0.05 | 47% |
| FFN | +0.82 | 82% | +0.18 | 57% | +0.04 | 57% |
| Attention + FFN | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| % of text | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Gain | Wins | Gain | Wins | Gain | Wins | |
| 10% | +1.02 | 80% | +0.75 | 66% | +0.09 | 59% |
| 25% | +1.01 | 82% | +0.42 | 59% | +0.05 | 59% |
| 50% | +1.11 | 86% | +0.53 | 57% | +0.07 | 45% |
| 100% | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
Appendix figures & tables16 assets
Supplementary material from the paper’s appendix.
Appendix
| Property | Value |
|---|---|
| The panel | |
| Source | FNSPID financial news ( Dong et al., 2024 ) |
| Universe | 1,099 US tickers |
| Span | 2 January 2014 to 27 December 2023 |
| Observations | 252,000 article-days over 2,514 trading days |
| Articles per day | 99 at the median, 100 on average |
| Suite | Hugging Face identifier | Width | Vintages | |
|---|---|---|---|---|
| Released | Eligible | |||
| ChronoGPT | manelalab/chrono-gpt-v1-* | 1536 | 26 (1999–2024) | 21 (1999–2019) |
| ChronoGPT-Instruct | manelalab/chrono-gpt-instruct-v1-* | 1536 | 21 (2004–2024) | 16 (2004–2019) |
| DatedGPT | datedgpt/datedgpt-*-base | 2048 | 12 (2013–2024) | 7 (2013–2019) |
| PIT-4B | Diamegs/PIT-4B-* | 4096 | Monthly (2013–2024) | 7 used (2013–2019) |
| Setting | Value |
|---|---|
| The adapter | |
| Rank and scale | , |
| Placement | Attention and feed-forward projections of every block |
| Initialization | random |
| Every pretrained weight frozen | |
| Suite | IC | Return | Sharpe | |||
|---|---|---|---|---|---|---|
| Slope | -value | Slope | -value | Slope | -value | |
| ChronoGPT | +0.00004 | 0.40 | -0.0024 | 0.01 | -0.038 | 0.01 |
| ChronoGPT-Instruct | +0.00011 | 0.12 | +0.0002 | 0.83 | +0.003 | 0.82 |
| DatedGPT | +0.00034 | 0.55 | +0.0003 | 0.96 | +0.014 | 0.90 |
| Pooled | +0.00007 | 0.14 | -0.0016 | 0.01 | -0.024 | 0.01 |
| Regressand | Slope on staleness | -value |
|---|---|---|
| 0.14 | ||
| PALM | 0.35 | |
| Gain | 0.33 |
| ChronoGPT | ChronoGPT-Instruct | DatedGPT | ||||||
|---|---|---|---|---|---|---|---|---|
| Cutoff | PALM | Cutoff | PALM | Cutoff | PALM | |||
| 1999 | 10.61 | 10.58 | 2004 | 8.00 | 8.46 | 2013 | 5.74 | 6.85 |
| 2000 | 8.73 | 9.97 | 2005 | 9.02 | 10.23 | 2014 | 5.95 | 4.75 |
| 2001 | 6.80 | 8.37 | 2006 | 13.01 | 11.90 | 2015 | 10.48 | 11.03 |
| 2002 | 6.90 | 9.50 | 2007 | 9.52 | 9.28 | 2016 | 2.86 | 7.96 |
| 2003 | 5.40 | 7.21 | 2008 | 9.69 | 10.36 | 2017 | 3.86 | 4.00 |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Rank | Gain | Wins | Gain | Wins | Gain | Wins |
| 1 | +0.74 | 77% | +0.22 | 61% | +0.02 | 59% |
| 2 | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| 3 | +1.37 | 91% | +0.96 | 68% | +0.15 | 66% |
| 4 | +1.32 | 95% | +0.95 | 59% | +0.14 | 55% |
| 6 | +1.26 | 84% | +0.65 | 59% | +0.09 | 57% |
| Backbone | Width | |||||
|---|---|---|---|---|---|---|
| ChronoGPT | 1536 | +0.85 | +1.68 | +1.83 | +1.72 | +0.93 |
| ChronoGPT-Instruct | 1536 | +0.39 | +0.59 | +0.47 | -0.15 | -0.52 |
| DatedGPT | 2048 | +1.19 | +1.50 | +1.72 | +0.76 | +1.81 |
| PIT-4B | 4096 | +0.67 | -0.05 | +0.07 | +0.37 | +1.16 |
| Wording | / | IC | Gain | |||
|---|---|---|---|---|---|---|
| PALM | IC | Wins | ||||
| rise, increase, go up, gain | ||||||
| Reported | fall, decrease, go down, drop | 6.65 | 8.32 | 18/19 (95%) | 0.001 | |
| climb, advance, strengthen, rally | ||||||
| Alternative A | slide, retreat, weaken, tumble | 5.23 | 8.27 | 17/19 (89%) | 0.0003 | |
| up, higher, better, stronger | ||||||
| Ticker | Return | Headline | |
|---|---|---|---|
| ABT | Abbott rewards shareholders as shares peak | ||
| INCY | Incyte reports a survival benefit | ||
| VALE | Nucor acquires a majority stake | ||
| SPWR | California to reform solar policy | ||
| PCG | California to reform solar policy | ||
| AAL | Why airline stocks are falling |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Schedule | Gain | Wins | Gain | Wins | Gain | Wins |
| One pass, whole window | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| One pass per year | +0.80 | 80% | +0.34 | 64% | +0.04 | 57% |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Date | Gain | Wins | Gain | Wins | Gain | Wins |
| 2017 | +1.33 | 97% | +2.01 | 97% | +0.28 | 91% |
| 2018 | +1.70 | 94% | +2.13 | 89% | +0.30 | 89% |
| 2019 | +1.09 | 87% | +1.46 | 74% | +0.18 | 71% |
| 2020 | +1.41 | 85% | +1.26 | 63% | +0.17 | 61% |
| 2021 | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Share | Gain | Wins | Gain | Wins | Gain | Wins |
| 5% | +0.97 | 78% | +1.07 | 73% | +0.15 | 66% |
| 10% | +1.02 | 80% | +0.75 | 66% | +0.09 | 59% |
| 25% | +1.01 | 82% | +0.42 | 59% | +0.05 | 59% |
| 50% | +1.11 | 86% | +0.53 | 57% | +0.07 | 45% |
| 75% | +1.05 | 84% | +0.44 | 61% | +0.06 | 55% |
| IC | Return | Sharpe | ||||
| Budget | Gain | Wins | Gain | Wins | Gain | Wins |
| Number of steps, at a rate of | ||||||
| 100 steps | -0.00 | 58% | +0.05 | 51% | -0.00 | 47% |
| 200 steps | +0.17 | 55% | +0.42 | 55% | +0.05 | 52% |
| 300 steps | +0.37 | 73% | +0.30 | 59% | +0.03 | 57% |
| 600 steps | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Tokens | Gain | Wins | Gain | Wins | Gain | Wins |
| 64 tokens | +1.30 | 91% | +0.65 | 59% | +0.07 | 57% |
| 128 tokens | +1.33 | 93% | +0.68 | 59% | +0.09 | 59% |
| 256 tokens | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| 512 tokens | +1.18 | 89% | +0.59 | 61% | +0.09 | 64% |
| 1024 tokens | +1.19 | 91% | +0.70 | 61% | +0.10 | 61% |
| IC | Return | Sharpe | ||||
|---|---|---|---|---|---|---|
| Seed | Gain | Wins | Gain | Wins | Gain | Wins |
| Seed 0 | +1.26 | 91% | +0.69 | 61% | +0.10 | 61% |
| Seed 1 | +1.11 | 91% | +0.57 | 59% | +0.08 | 59% |
| Seed 2 | +1.24 | 91% | +0.86 | 68% | +0.12 | 55% |
| Seed 3 | +1.08 | 82% | +0.56 | 57% | +0.07 | 50% |
| Seed 4 | +1.35 | 85% | +0.73 | 64% | +0.10 | 62% |