<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Signal2Capital: How to derive actionable insights from data]]></title><description><![CDATA[This is a step by step guide of what to do with all of your data. We'll get into using python, sql and powerBI inconjuction with AI to make better analytical reports]]></description><link>https://signal2capital.substack.com/s/how-to-derive-actionable-insights</link><image><url>https://substackcdn.com/image/fetch/$s_!SPVD!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ba82b-12fb-4218-b370-4c65bf9a377c_144x144.png</url><title>Signal2Capital: How to derive actionable insights from data</title><link>https://signal2capital.substack.com/s/how-to-derive-actionable-insights</link></image><generator>Substack</generator><lastBuildDate>Fri, 31 Jul 2026 17:37:12 GMT</lastBuildDate><atom:link href="https://signal2capital.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Derek Bowens]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[signal2capital@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[signal2capital@substack.com]]></itunes:email><itunes:name><![CDATA[Derek Bowens]]></itunes:name></itunes:owner><itunes:author><![CDATA[Derek Bowens]]></itunes:author><googleplay:owner><![CDATA[signal2capital@substack.com]]></googleplay:owner><googleplay:email><![CDATA[signal2capital@substack.com]]></googleplay:email><googleplay:author><![CDATA[Derek Bowens]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Frontier ]]></title><description><![CDATA[A company in descent without Spirit]]></description><link>https://signal2capital.substack.com/p/frontier</link><guid isPermaLink="false">https://signal2capital.substack.com/p/frontier</guid><dc:creator><![CDATA[Derek Bowens]]></dc:creator><pubDate>Wed, 13 May 2026 16:09:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SPVD!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ba82b-12fb-4218-b370-4c65bf9a377c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Frontier flew $3.7 billion worth of flights. A third of the seats were empty. Then Spirit shut down.</h1><p><em>Two years of load factor data. One quarter that proved the thesis. Eight days ago, 8 million displaced passengers showed up at the same airports Frontier flies.</em></p><p><strong>Derek Bowens &#183; May 2026 &#183; Business Analysis &#183; Signal2Capital</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Frontier Airlines reported $3.7 billion in revenue last year. 33 million passengers. $112 average per ticket. On paper that reads like a ULCC operating at scale. The problem was always the math behind how they got there &#8212; at full occupancy, hitting $3.7 billion required 2.45 flights per aircraft per day. They were running 4. This quarter, Frontier paid $139 million to exit 24 aircraft early and deferred 69 future deliveries. When the cycle cost bill comes due, it shows up in cash.</p><p>The revenue headline was real. The cost of generating it through operational volume rather than occupancy was also real, and Q1 2026 is where it converted from a structural concern into a line item on the income statement.</p><div><hr></div><h2>The Fleet &#8212; Where the Math Starts</h2><p>Frontier&#8217;s fleet as of March 31, 2026 was 183 Airbus single-aisle aircraft. In Q2 2026, they are returning 24 A320neo aircraft under an early termination agreement &#8212; reducing the operational fleet to approximately 159. The seat composition matters because it directly sets the revenue ceiling per flight and the cost of every empty seat.</p><p>Aircraft Qty Seats Fleet Share A320ceo 6 180&#8211;186 3.3% A320neo 94 186 51.4% &#8212; shrinking (&#8722;24 in Q2) A321ceo 21 230 11.5% A321neo 62 240 33.9% <strong>Total</strong> <strong>183</strong> &#8212; &#8212;</p><p>The weighted average across all 183 aircraft is <strong>210 seats per plane</strong>. Forty-six percent of Frontier&#8217;s fleet &#8212; 83 aircraft &#8212; are A321s configured at 230 or 240 seats. This matters because bigger aircraft amplify the empty seat problem: an A321neo at 80% load factor leaves 48 empty seats per flight worth $5,376 in unrealized revenue. An A320neo leaves 37 seats &#8212; $4,166.</p><p>When they return the 24 A320neo aircraft, the average seat count per departure actually rises. The remaining fleet is heavier and needs higher load factors to justify it.</p><div><hr></div><h2>The Metric &#8212; OEG</h2><p>Plus/minus and load factor are known stats. What&#8217;s missing is a number that ties occupancy directly to operational excess &#8212; how many extra flight cycles are being run specifically because seats aren&#8217;t full. That&#8217;s the <strong>Operational Efficiency Gap (OEG)</strong>.</p><pre><code><code>Full-Load Revenue per Flight = Weighted Avg Seats &#215; Revenue per Passenger
  = 210 &#215; $127.95 (Q1 2026 adjusted) = $26,870 per flight

Structural Break-Even = $3.7B &#247; $26,870 &#247; 176 aircraft &#247; 365 = 2.45 flights/day

OEG = Actual Flights &#247; Full-Load Break-Even
  Full-year basis:  4 &#247; 2.45 = 1.63
  Q1 2026 actual:   3.24 &#247; 2.37 = 1.36
</code></code></pre><p>OEG = 1.0 means the operation runs at full occupancy. Every point above 1.0 represents cycles added to compensate for empty seats or below-target revenue per seat. Frontier&#8217;s structural OEG was 1.63 against annual targets. Q1 2026 pulled back to 1.36 through deliberate utilization reduction &#8212; a meaningful move that still carries 36% more cycles than a full-plane scenario requires.</p><div><hr></div><h2>Three Years of Load Factor &#8212; The Full Arc</h2><p>Quarter Load Factor Rev / Pax Fare / Pax Adj. Break-Even Utilization Q2 2023 <strong>85.3%</strong> $127 &#8212; 2.88 &#8212; Q1 2023 82.8% $124 &#8212; 2.96 &#8212; Q3 2023 80.0% $115 &#8212; 3.07 &#8212; Q1 2024 72.9% &#11015; $123 $44.61 3.36 ~9.8 hrs Q2 2024 78.1% $109 &#8212; 3.14 &#8212; Q3 2024 78.0% $106 &#8212; 3.14 &#8212; Q4 2024 79.0% $117 &#8212; 3.10 &#8212; Q1 2025 72.9% &#11015; $116 $44.61 3.27 9.7 hrs Q2 2025 79.3% $109 &#8212; 3.09 &#8212; Q3 2025 80.7% $106 &#8212; 3.04 &#8212; Q4 2025 79.0% $117 &#8212; 3.10 &#8212; <strong>Q1 2026 &#9733;</strong> <strong>78.4%</strong> <strong>$127.95 adj</strong> <strong>$55.45 adj</strong> <strong>2.37</strong> <strong>8.5 hrs &#8595;12%</strong></p><p><em>Adj. break-even = 2.45 &#247; load factor. Q1 2026 from May 5, 2026 earnings release.</em></p><p><strong>What the Q1 2026 numbers actually say:</strong> Load factor of 78.4% is up 3.5 points from Q1 2025&#8217;s 74.9% &#8212; a real improvement. But the more important number is utilization: 8.5 block hours per aircraft per day, down 12% from 9.7 in Q1 2025. Frontier deliberately flew fewer cycles per aircraft to reduce operational excess. The OEG compressed to 1.36 not because the planes got fuller &#8212; they didn&#8217;t, meaningfully &#8212; but because management pulled back on frequency. That&#8217;s the right move. It also confirms the thesis: the prior utilization rate was unsustainable, and they knew it.</p><div><hr></div><h2>The Cost of 4 Flights Per Day &#8212; Q1 2026 Proves It</h2><p>The structural argument was that running 63% more cycles than full-occupancy requires would show up in costs. Q1 2026 is where it did &#8212; not gradually, but all at once.</p><p>Cost Line Q1 2025 Q1 2026 Change Maintenance, materials &amp; repairs $51M $142M <strong>+178%</strong> Aircraft rent $161M $265M <strong>+65%</strong> Depreciation &amp; amortization $20M $62M <strong>+210%</strong></p><p>Maintenance up 178% in a single quarter. The $139 million Early Return Agreement &#8212; Frontier&#8217;s payment to exit leases on 24 A320neo aircraft &#8212; is the most explicit confirmation available. Inside that charge: $73 million in non-recoverable capitalized prepaid maintenance written off entirely, plus $37 million in accelerated depreciation tied to maintenance cycles that had been consumed faster than the accounting expected.</p><p>They didn&#8217;t exit these aircraft because they had too many planes. They exited them because the maintenance clock on those specific aircraft had been spent down by high-cycle utilization.</p><blockquote><p><strong>The Early Return Agreement &#8212; $5.8M per aircraft to walk away.</strong> Frontier paid approximately $5.8 million per aircraft to terminate 24 A320neo leases early. These are planes they already owned the lease rights on. The $73 million written off was prepaid maintenance that couldn&#8217;t be recovered because the heavy maintenance events had already been triggered by cycle accumulation. They burned the aircraft economically before the lease expired contractually.</p></blockquote><p>They also deferred 69 future A320 family aircraft deliveries. That&#8217;s not a demand signal &#8212; adjusted revenue is up 17%, an all-time record. It&#8217;s a network signal. They don&#8217;t need more aircraft. They need fewer airports.</p><div><hr></div><h2>The 99 Airport Problem</h2><p>Frontier currently serves 99 airports. The thesis: demand supports 80, not 99. The company&#8217;s own behavior validates it.</p><p>Period Action Scale Signal H1 2024 Launched new routes ~110 routes Demand discovery phase Mid-2024 Route cuts 43 routes ~39% of new routes failed immediately Dec 2024 Suspended routes 40+ routes Supply/demand imbalance acknowledged H1 2025 Further reductions 40+ routes Off-peak days structurally thin Q1 2026 Fleet return + deferral 24 returned, 69 deferred Rightsizing to demand, not chasing volume</p><p>They launched 110 routes in six months and cut 64% of them within a year. The CEO said it directly: <em>&#8220;There is too much supply relative to demand.&#8221;</em> That&#8217;s not a macroeconomic observation &#8212; it&#8217;s a network admission.</p><p><strong>What network discipline does to OEG:</strong></p><p>Scenario Load Factor Adj. Break-Even OEG Annual Cycles Saved 2024 baseline 76.0% avg 3.22 1.24 &#8212; 2025 actual 79.3% 3.09 1.29 Baseline 80-airport thesis 85.0% 2.89 1.18 ~36,000/year 80-airport optimized 87.0% 2.82 1.15 ~52,000/year</p><p>Each saved cycle eliminates one landing fee, one fuel-burn-on-climb, one crew hour minimum, and one maintenance event accumulation.</p><div><hr></div><h2>The Revenue Mix Shift &#8212; The One Number That&#8217;s Improving</h2><p>Metric Q1 2025 Q1 2026 Change Fare revenue per passenger $44.61 <strong>$55.45 adj</strong> <strong>+24%</strong> Non-fare (ancillary) per passenger $68.15 $67.71 adj &#8722;1% Ancillary share of total revenue 58.6% 52.9% &#8722;5.7 pts Total adjusted revenue per passenger $116.33 $127.95 +10%</p><p>The prior thesis noted that $65 of every $106 Frontier collected came from fees, not fares. That dynamic is changing. Adjusted fare revenue per passenger grew 24% to $55.45 &#8212; the first time base ticket revenue has meaningfully closed the gap on ancillary. The split is now approximately $55 fare to $68 ancillary. If fare revenue continues growing toward $60&#8211;65 per passenger, the revenue per boarding becomes less sensitive to whether the passenger checks a bag. The model gets sturdier without the occupancy needing to change.</p><div><hr></div><h2>What Q2 2026 Looks Like &#8212; The New Headwind</h2><p>Frontier guided Q2 2026 to a loss of $0.45&#8211;$0.60 per share despite RASM expected up over 20% year over year. The reason: average fuel cost of $4.25 per gallon in Q2 versus $2.88 in Q1 &#8212; a 47% increase in a single quarter.</p><p>Q1 2026 Q2 2026 Guidance Fuel cost per gallon $2.88 $4.25 Total fuel expense $268M Est. ~$390M+ Change &#8212; <strong>+47%</strong></p><p>A 40% fuel efficiency advantage over legacy carriers means Frontier burns fewer gallons per seat mile. At $4.25/gallon that efficiency gap actually saves more in absolute dollars than at $2.88. The ULCC model is structurally better in a high-fuel environment &#8212; as long as load factor holds and cycle count stays disciplined.</p><div><hr></div><h2>Spirit Airlines Shuts Down &#8212; And Frontier&#8217;s Load Factor Problem May Have Just Solved Itself</h2><p>On May 2, 2026 &#8212; eight days ago &#8212; Spirit Airlines ceased all operations. Every Spirit passenger stranded. Frontier&#8217;s CEO said the airline expects to capture a significant share of Spirit&#8217;s displaced passengers, noting Frontier shares more than 100 overlapping routes with Spirit &#8212; more than any other carrier.</p><p>Spirit&#8217;s passenger base was concentrated at four mid-major hubs where Frontier was listed as &#8220;other&#8221; in market share data. At these four airports, Spirit held a top-two or top-three position. The passengers were exactly the price-sensitive leisure travelers Frontier&#8217;s $127.95 adjusted revenue per passenger is built to serve.</p><p><strong>The four airports: Fort Lauderdale (FLL), Baltimore-Washington (BWI), Detroit Metro (DTW), and Chicago Midway (MDW).</strong></p><div><hr></div><h2>The Four-Hub Capture Model</h2><p>Airport Spirit Rank Spirit Share Spirit Enplanements Frontier Position FLL &#8212; Fort Lauderdale <strong>#1</strong> <strong>31.4%</strong> 5,500,000 Other BWI &#8212; Baltimore #2 6.9% 960,000 Other DTW &#8212; Detroit #4 11.8% 850,000 #5 (134K pax) MDW &#8212; Chicago Midway #2 6.5% 698,750 Other <strong>Total</strong> &#8212; &#8212; <strong>8,008,750</strong> &#8212;</p><blockquote><p><strong>FLL &#8212; The flagship number.</strong> Spirit flew 11 million passengers in and out of Fort Lauderdale in 2024 &#8212; a 31.4% market share. Spirit&#8217;s FLL headquarters sat one mile from the terminal. It occupied 10 gates. That entire passenger base is now without a primary carrier. Frontier already serves FLL. The seats are there. The question is only whether the passengers rebook on Frontier or drift to JetBlue, which moved to add routes within days of the shutdown.</p></blockquote><p><strong>Revenue capture by scenario</strong> <em>(at $127.95 per passenger)</em>:</p><p>Scenario FLL BWI DTW MDW Total Revenue LF Impact Conservative &#8212; 30% $211M $37M $33M $27M <strong>$307M</strong> +5.4pts &#8594; 83.8% <strong>Base Case &#8212; 42%</strong> <strong>$296M</strong> <strong>$52M</strong> <strong>$46M</strong> <strong>$38M</strong> <strong>$430M</strong> <strong>+7.6pts &#8594; 86.0%</strong> Optimistic &#8212; 55% $387M $68M $60M $49M <strong>$564M</strong> +10.0pts &#8594; 88.4%</p><p>The base case &#8212; 42% capture &#8212; generates $430 million in additional revenue and pushes Frontier&#8217;s load factor from 78.4% to 86.0%. That single move crosses the 85% threshold identified as the structural break-even for the OEG. The number of flights required to cover revenue drops below 2.9 per aircraft per day. The fourth flight becomes genuine margin instead of operational compensation for empty seats.</p><p><strong>The summary:</strong></p><p>Value Spirit passengers available (4 hubs) 8.0M Base case capture (42%) 3.4M passengers Incremental revenue $430M Load factor after capture <strong>86.0%</strong> OEG after capture <strong>1.10</strong></p><div><hr></div><h2>DTW &#8212; The Sharpest Ratio</h2><p>Fort Lauderdale is the largest number. Detroit is the most structurally significant ratio.</p><p>Frontier carried 134,887 passengers at DTW in all of 2025. Spirit carried 1.7 million &#8212; 12.6 times more. At 42% capture that&#8217;s 357,000 additional passengers at an airport where Frontier is currently the fifth-largest carrier. That&#8217;s <strong>2.6x Frontier&#8217;s entire current DTW volume</strong> from a single competitor exiting.</p><p>Spirit&#8217;s top routes from DTW were Fort Lauderdale, Orlando, and Las Vegas &#8212; three of Frontier&#8217;s core leisure destinations, routes Frontier already flies from Detroit. The passengers aren&#8217;t looking for a new destination. They&#8217;re looking for the same flight on a different yellow plane.</p><div><hr></div><h2>The Competition for the Rebooking</h2><p>Frontier is not the only carrier moving. JetBlue announced new FLL routes within 72 hours. Southwest is present at BWI with 71% market share and a structurally different customer base. Avelo and Breeze are expanding at secondary Spirit markets.</p><p>The capture window is measured in weeks, not months. Passengers stranded by an abrupt shutdown make new booking decisions quickly, and those decisions tend to stick.</p><p>Frontier&#8217;s advantage is specificity: it flies the same types of routes to the same types of destinations at the same price architecture as Spirit. The 100+ overlapping routes is not a marketing statement &#8212; it&#8217;s a structural description of why Frontier&#8217;s seats are the natural rebook for a Spirit traveler whose flight disappeared. The question is execution speed, not demand existence.</p><div><hr></div><h2>The Call</h2><p>The structural thesis of this article hasn&#8217;t changed. What has changed is the timeline: Frontier is executing the correction on its own network, but paying for it in cash &#8212; and a demand event just arrived that may accelerate the resolution faster than the internal fix would have on its own.</p><p>Two parallel stories are now running simultaneously.</p><p>Inside the operation: the Early Return Agreement is $139 million spent admitting that high-cycle utilization on thin routes is more expensive than the revenue it generates. Deferring 69 deliveries is acknowledgment that more aircraft without better load factor is a cost accelerant, not a revenue solution.</p><p>Outside the operation: 8 million Spirit passengers across four hubs where Frontier already flies are looking for a new carrier this week.</p><p>If Frontier captures 42% of that displaced demand, the load factor clears 85%, the OEG drops below 1.10, and the break-even flight count falls below 2.9 per aircraft per day. The maintenance clock still runs. The fuel cost headwind in Q2 is real. But the occupancy problem &#8212; the root cause of the OEG, the cycle excess, and the deferred-maintenance bill &#8212; resolves through inbound demand rather than outbound capacity cuts. That&#8217;s a structurally faster fix.</p><p>The Q2 2026 guidance showing a projected loss of $0.45&#8211;$0.60 per share was built before Spirit shutdown. It does not reflect Spirit passenger capture. The next earnings call is the first real read on whether Frontier moved fast enough at FLL, BWI, DTW, and MDW to absorb what was, until eight days ago, the largest ULCC passenger base in the country.</p><blockquote><p><em>&#8220;We remain focused on our four key strategic priorities centered around rightsizing the fleet, strengthening our cost discipline, improving operational reliability and driving customer loyalty.&#8221;</em> &#8212; Jimmy Dempsey, President and CEO, Q1 2026 Earnings &#8212; May 5, 2026. Spirit shut down May 2.</p></blockquote><p>The CEO gave that statement three days after Spirit&#8217;s last flight landed in Dallas. The OEG was telling the empty-seat story in the data for two years. Now the income statement is telling it in cash. And the demand side just handed Frontier the fastest path to closing the gap it&#8217;s had since the expansion started.</p><div><hr></div><p><em>OEG methodology: weighted average seats from Frontier Group Holdings fleet tables (Q4 2025: 176 aircraft; Q1 2026: 183 aircraft). Full-load break-even = annual revenue target &#247; (weighted avg seats &#215; revenue per passenger) &#247; fleet size &#247; 365. Q1 2026 actual utilization: 51,893 departures &#247; 90 days &#247; 178 avg aircraft in service = 3.24 flights/day. Revenue and operating data: Frontier Group Holdings Q1 2026 earnings release (May 5, 2026) and prior quarterly releases Q1 2023&#8211;Q4 2025 via SEC filings. Spirit market share data: BWI Airport press kit; WLRN/South Florida reporting (FLL); Detroit News (DTW); Chicago Dept. of Aviation (MDW). Spirit shutdown: CNN, NPR, CBS News (May 2&#8211;5, 2026). Frontier CEO Spirit overlap quote: Reuters/Detroit News (May 6, 2026). Source: ir.flyfrontier.com</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Module 3: Building the Model]]></title><description><![CDATA[Actionable Insights &#8212; Module 3 of 4 How to run a decision tree that actually answers the right question]]></description><link>https://signal2capital.substack.com/p/module-3-building-the-model</link><guid isPermaLink="false">https://signal2capital.substack.com/p/module-3-building-the-model</guid><dc:creator><![CDATA[Derek Bowens]]></dc:creator><pubDate>Sat, 21 Mar 2026 14:06:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SPVD!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ba82b-12fb-4218-b370-4c65bf9a377c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div><hr></div><h2>Series Context</h2><p>Module 1 covered question framing. Module 2 covered dataset construction from public filings. This module covers what you build with that data &#8212; and what happens when the model surprises you.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The case study throughout is Kyndryl &#8212; the world&#8217;s largest IT infrastructure services company. The question: given $3.1B in unconverted signing backlog, where should capital flow to maximize 5-year revenue? Module 4 turns the answer into dollars.</p><div><hr></div><h2>Section 1 &#8212; Start With a Baseline, Not a Hypothesis</h2><p>Most models are built to confirm something. The better move is to build a baseline first &#8212; a ground-level view of what current state produces before any optimization is applied.</p><p>For Kyndryl, the baseline was built from current signing activity: segment revenue, signing volumes across service lines, and quarter-over-quarter growth rates. Before the model ran a single optimization, the baseline answered one question:</p><blockquote><p><strong>The Baseline Question</strong> If Kyndryl maintains its current signing mix with no reallocation, what does the 5-year revenue trajectory look like?</p></blockquote><p>This matters because it establishes the comparison point. Without a baseline you cannot quantify what the optimized allocation is worth. The delta between baseline and optimized output is the dollar case for change &#8212; and that is what Module 4 is built around.</p><h3>What QoQ Growth Rates Were Actually Telling You</h3><p>Quarter-over-quarter tracking was not included to add data volume. It was included to flag calibration problems before they compound. A model built on static inputs drifts from reality fast in a business as cyclical as IT services.</p><p>Three things QoQ growth rates expose:</p><ul><li><p><strong>Signing velocity changes</strong> &#8212; are certain service lines accelerating or decelerating at the contract level?</p></li><li><p><strong>Revenue conversion lag</strong> &#8212; how long between signing and recognized revenue by segment?</p></li><li><p><strong>Growth rate divergence</strong> &#8212; when cloud is growing at 3x the rate of managed services, the model should weight forward differently than it weights backward.</p></li></ul><p>One variable not captured in the initial baseline: cost of acquisition per contract type. Not all contracts are equally efficient to win. That gap becomes material in Module 4 when the allocation recommendation gets priced under real-world constraints.</p><div><hr></div><h2>Section 2 &#8212; The Test: What Happens to Revenue by Signing Mix?</h2><p>With the baseline set, the test had a clean question:</p><blockquote><p><strong>The Test Question</strong> Across every possible signing mix &#8212; every combination of Consult, Cloud, and Managed Services as a share of total backlog &#8212; which allocation produces the highest 5-year top-line revenue?</p></blockquote><p>The method was a decision tree classifier run across 1,000 iterations. Each iteration tested a different signing mix against the revenue model and returned a profitability score. The classifier ranked every combination and surfaced the top-performing allocation.</p><h3>Why 1,000 Iterations?</h3><p>A single scenario tells you what one configuration looks like. A thousand tells you the shape of the solution space &#8212; where the peaks are, where the floor drops, and whether the optimal mix is a narrow spike or a broad plateau. In Kyndryl&#8217;s case the output showed a broad plateau around the winning configuration, which matters for implementation: small deviations from the recommended mix do not crater the outcome.</p><h3>What the Test Returned</h3><p>Both the initial run and the rerun after factoring in hyperscaler growth rates returned the same answer: a blended Consult + Cloud mix outperformed every pure-play configuration. Not Cloud alone. Not Consult alone. The blend won both times.</p><p>Run Result Run 1 &#8212; Initial Blended Consult + Cloud &#8212; highest 5-year revenue Run 2 &#8212; Hyperscaler growth factored Blended Consult + Cloud &#8212; same winner, confirmed Pure Cloud Ranked 2nd both runs Pure Consult Strong near-term, weaker at Year 4+ Managed Services heavy Lowest ceiling &#8212; declining market share</p><p>Cloud came out second both times. The assumption going in was that hyperscaler growth would dominate. It did not. Cloud revenue recognition carries a long conversion lag from signing. Consult engagements convert faster and generate the advisory and migration work that makes Cloud deployments viable. They are not competing service lines. They are sequential ones.</p><div><hr></div><h2>Section 3 &#8212; The Code</h2><p>Below is the full decision tree classifier used to run the 1,000-iteration signing mix test. Each block is annotated. The AI prompt shortcut follows for those who want to generate equivalent logic without writing the scaffolding manually.</p><h3>Block 1 &#8212; Imports and Data Setup</h3><pre><code><code>import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import itertools

# Load your financial model data
# Required columns: segment, signing_volume, revenue_recognized,
#                   quarter, growth_rate, conversion_rate
df = pd.read_csv('kyndryl_signings.csv')

# Define your service line segments
segments = ['consult', 'cloud', 'managed_services']
</code></code></pre><h3>Block 2 &#8212; Build the Signing Mix Combinations</h3><pre><code><code># Generate all allocation combinations (must sum to 100%)
# Step size of 5 = 231 combinations across 3 segments
# Increase step to reduce combinations if runtime is slow

step = 5
allocations = []

for c in range(0, 101, step):
    for cl in range(0, 101 - c, step):
        ms = 100 - c - cl
        if ms &gt;= 0:
            allocations.append({
                'consult': c,
                'cloud': cl,
                'managed_services': ms
            })

print(f'{len(allocations)} allocation combinations generated')
</code></code></pre><h3>Block 3 &#8212; Run 1,000 Iterations Across Every Mix</h3><pre><code><code>results = []

for alloc in allocations:
    # Apply weights to signing volumes by segment
    df['weighted_revenue'] = (
        df['signing_volume'] * (alloc['consult'] / 100) * df['consult_conversion_rate'] +
        df['signing_volume'] * (alloc['cloud'] / 100) * df['cloud_conversion_rate'] +
        df['signing_volume'] * (alloc['managed_services'] / 100) * df['ms_conversion_rate']
    )

    # Run 1,000 iterations with variance to stress-test the mix
    iteration_revenues = []
    for i in range(1000):
        noise = np.random.normal(1.0, 0.02)  # +/- 2% per run
        iteration_revenues.append(df['weighted_revenue'].sum() * noise)

    results.append({
        'consult_pct': alloc['consult'],
        'cloud_pct': alloc['cloud'],
        'ms_pct': alloc['managed_services'],
        'avg_5yr_revenue': np.mean(iteration_revenues),
        'std_dev': np.std(iteration_revenues)
    })

results_df = pd.DataFrame(results)
</code></code></pre><h3>Block 4 &#8212; Output the Top Results</h3><pre><code><code># Sort by average 5-year revenue, descending
results_df = results_df.sort_values('avg_5yr_revenue', ascending=False)

# Top 10 mixes
print(results_df.head(10))

# Single best mix
print('Optimum signing mix:')
print(results_df.iloc[0])

# Filter: mixes where Cloud is at least 30%
cloud_heavy = results_df[results_df['cloud_pct'] &gt;= 30]
print(cloud_heavy.head(5))
</code></code></pre><h3>Block 5 &#8212; Rerun With Hyperscaler Growth Factored In</h3><pre><code><code># Adjust cloud conversion rate for forward growth trajectory
# Source from QoQ actuals or analyst consensus estimates

hyperscaler_growth_multiplier = 1.18  # 18% YoY growth on cloud

df['cloud_conversion_rate_adjusted'] = (
    df['cloud_conversion_rate'] * hyperscaler_growth_multiplier
)

# Rerun Block 3 using cloud_conversion_rate_adjusted
# Compare new results_df to original
#
# If winner changes: the growth rate is load-bearing for the recommendation
# If winner holds: the blend is robust across growth scenarios
</code></code></pre><h3>AI Prompt Shortcut</h3><p>If you want to generate equivalent logic without writing the scaffolding:</p><blockquote><p>&#8220;I have a dataset with signing volumes and revenue conversion rates across three service lines: Consult, Cloud, and Managed Services.</p><p>Build a decision tree classifier that runs 1,000 iterations across all possible allocation combinations (step size 5%, must sum to 100%). Optimize for 5-year total revenue. Output the top 10 combinations sorted by average revenue. Include standard deviation.</p><p>Show the code with comments on each block. Add a filtered view showing only combinations where Cloud is at least 30% of the mix.&#8221;</p></blockquote><p>Once it runs:</p><ul><li><p>Top 10: <code>print(results_df.head(10))</code></p></li><li><p>Single best mix: <code>print(results_df.iloc[0])</code></p></li></ul><div><hr></div><h2>Section 4 &#8212; What the Model Told You</h2><p>Two things came out of this test. One confirmed what the data suggested. One changed the direction of the analysis.</p><h3>What It Confirmed</h3><p>Managed services as a growth vehicle is structurally constrained. Kyndryl holds significant share in a segment that is shrinking as enterprises migrate away from legacy infrastructure. The model confirmed that over-indexing on managed services caps the 5-year ceiling regardless of operational efficiency.</p><h3>What It Surprised You With</h3><p>Cloud came out second &#8212; not first. The assumption going in was that hyperscaler growth would dominate. It did not. Cloud revenue recognition carries a long conversion lag from signing. Consult engagements convert faster and generate the advisory and migration work that makes Cloud deployments viable. They are not competing service lines. They are sequential ones.</p><p>This is the kind of output that requires going back to the source data rather than accepting the result at face value. The QoQ growth rates for cloud signings were real. The conversion lag was also real. The model was not wrong &#8212; it was revealing a structural dependency that the initial framing had treated as two independent categories.</p><h3>What the Model Still Could Not Answer</h3><p>The classifier optimized for top-line revenue. It did not account for:</p><ul><li><p><strong>Cost of acquisition per contract type</strong> &#8212; some engagements are more expensive to win than others</p></li><li><p><strong>FCF timing</strong> &#8212; Year 4 revenue is not the same as Year 1 revenue for a company managing near-term liquidity</p></li><li><p><strong>Execution capacity</strong> &#8212; a 60% Consult allocation requires headcount that may not exist at that scale</p></li></ul><p>Those constraints are what Module 4 addresses. The model found the optimum. Module 4 prices it under real-world conditions.</p><div><hr></div><h2>Module 4 Preview &#8212; Turning the Observation Into Dollars</h2><p>The model returned a winner. Module 4 asks what it costs to execute it &#8212; and what it is worth if you do.</p><p>The blended Consult + Cloud allocation is not a spreadsheet output. It is a capital deployment decision. That means it needs a dollar figure attached to it &#8212; not just a revenue projection, but a net value: what you spend to shift the mix, what you recover in revenue, and at what point the investment pays back.</p><p>Module 4 covers three things:</p><ol><li><p>The allocation recommendation in full &#8212; what percentage of backlog goes where, and why</p></li><li><p>The constraint layer &#8212; FCF solvency, acquisition cost differentials, and execution capacity applied to the model output</p></li><li><p>The net dollar case &#8212; what the recommendation is worth over five years, expressed as a specific number with documented assumptions</p></li></ol><p>A model that cannot be converted to a decision is just analysis. Module 4 makes it a recommendation.</p><div><hr></div><p><em>signal2capital.substack.com &#8212; Actionable Insights, Module 3 of 4 &#8212; Derek Bowens</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Cookwise Growth Analysis: Churn Rate, Channel Strategy & a $1.4M Revenue Argument]]></title><description><![CDATA[A Financial Report Built on Public Data, a Decision Tree, and a 24-Month Forecast]]></description><link>https://signal2capital.substack.com/p/cookwise-growth-analysis-churn-rate</link><guid isPermaLink="false">https://signal2capital.substack.com/p/cookwise-growth-analysis-churn-rate</guid><dc:creator><![CDATA[Derek Bowens]]></dc:creator><pubDate>Wed, 18 Mar 2026 22:19:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SPVD!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ba82b-12fb-4218-b370-4c65bf9a377c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div><hr></div><h2>Dedication</h2><p>I told my brother about how I finished my first end to end data analysis project and he said okay &#8212; what are you looking to achieve with this?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I realized that sports analysis is just one industry and this channel is built on everything encompassing analytics. Today&#8217;s article is a financial report that addresses churn rate and my recommendations after analyzing the data, building a data model to address baseline, and 4 scenarios.</p><p>I fully enjoyed this project and do want to state that although I am a decent coder, I decided to use Anthropic&#8217;s Claude AI to handle the grunt coding work and then looked it over and revised for errors between prompts.</p><div><hr></div><h2>The Setup</h2><p>Every consumer subscription business has the same problem: they spend money acquiring customers, and a meaningful percentage of those customers leave before the company earns that money back. The question is never whether churn exists. The question is <em>which lever</em> reduces it most efficiently, <em>what that lever costs</em>, and <em>what it actually returns in dollars</em>.</p><p>I chose to model this against <strong>HelloFresh SE (ETR: HFG)</strong> &#8212; the largest publicly traded meal kit company in the world &#8212; because they publish more granular subscriber metrics than almost any consumer subscription company. Their investor relations disclosures include quarterly CAC figures, 12-month revenue retention (~42%), 24-month retention (~25%), and marketing spend methodology. That gave me a credible benchmark to build from.</p><p>The target company I am making recommendations for is <strong>Cookwise</strong> &#8212; an AI-powered meal planning and recipe app. Structurally similar problem set. Subscription-based. Acquisition-channel-dependent. High early churn risk.</p><div><hr></div><h2>The Data</h2><p>I built a 5,000-row customer dataset modeled on HelloFresh&#8217;s public retention benchmarks, with three supporting tables:</p><ul><li><p><strong>Customer Data</strong> &#8212; cohort quarter, acquisition channel, plan type, churn flag, CLV, NPS score</p></li><li><p><strong>Shipping/Fulfillment</strong> &#8212; delivery zone, carrier, on-time rate, order value</p></li><li><p><strong>Marketing Funnel</strong> &#8212; 12 quarters &#215; 7 channels: impressions, signups, CAC, 30/90/365-day retention, ROAS</p></li></ul><p>Channels modeled: Paid Social, Paid Search, Influencer, Organic/SEO, Referral, TV/CTV, Email Re-engage.</p><p>The churn rates were not random. They were built with realistic differentiation so the model would actually surface signal when analyzed. Referral customers churn at ~40.8%. Influencer customers churn at ~55.3%. That 15-point spread is the foundation of the entire recommendation.</p><div><hr></div><h2>What the Decision Tree Found</h2><p>I ran a <strong>Decision Tree Classifier</strong> (scikit-learn, max depth 5, 80/20 train/test split) across all 5,000 customers with seven features: channel, plan type, region, monthly revenue, orders in the last 12 months, tenure in months, and NPS score.</p><p><strong>Feature importance ranking:</strong></p><ol><li><p><strong>Acquisition Channel</strong> &#8212; #1 churn driver by a significant margin</p></li><li><p><strong>Tenure (Months)</strong> &#8212; months 1&#8211;3 are the highest-risk window</p></li><li><p><strong>Monthly Revenue</strong> &#8212; higher-revenue customers churn less</p></li><li><p><strong>NPS Score</strong> &#8212; low NPS strongly predicts churn within 90 days</p></li><li><p><strong>Orders LTM</strong> &#8212; order frequency is the best early-warning signal</p></li><li><p><strong>Plan Type</strong> &#8212; Ready-to-Eat retains better than meal kits</p></li><li><p><strong>Region</strong> &#8212; minor factor; channel dominates</p></li></ol><p>The most important finding: <strong>revenue tier is not a reliable churn predictor</strong>. This matters because a common instinct is to protect high-revenue customers differently. The model says that is the wrong variable. Channel, tenure, and NPS score are the actual levers.</p><div><hr></div><h2>The Cohort Retention Pivot</h2><p>A cohort retention pivot answers one question: of the customers acquired in a given period, what percentage are still active at each milestone?</p><p>I built this across all 16 cohort quarters (Q1 2021 through Q4 2024), tracking retention at months 1, 3, 6, 9, 12, 18, and 24 &#8212; then split the same table by acquisition channel.</p><p>The Referral and Organic/SEO channels show the slowest decay curves. Influencer and Email Re-engage show the steepest drop-offs before month 3. That visual alone makes the channel argument &#8212; you can see exactly where the money is being lost and when.</p><div><hr></div><h2>The Hypothesis Stack</h2><p>Going into the analysis I had three hypotheses. Here is what the data said about each.</p><p><strong>Hypothesis 1 &#8212; Tiered Referral Reward</strong> Offer $10 credit at signup and $25 credit at 90 days to both the referrer and the referee. Target: the 64% of referral customers lapsing before day 90.</p><p>The model projected: 6.5% CLV lift, 8% churn reduction on the referral base, $35 incentive cost per customer. Net gain at current scale: <strong>+$15,771</strong>. The math becomes more compelling as the referral base grows because CLV lift compounds while incentive cost is fixed.</p><p>A/B test design: 90-day control (no bonus) vs 90-day reward cohort. Primary metric: CLV delta at 6 months. Scale if CLV delta exceeds incentive cost and churn reduction hits 5% or higher. Kill if neither threshold is met.</p><p><strong>Hypothesis 2 &#8212; Revenue vs Churn</strong> I bucketed customers into four revenue tiers and measured churn rate per tier. The decision tree confirmed: revenue level is not the determining factor. Eliminated as a standalone strategic variable.</p><p><strong>Hypothesis 3 &#8212; Influencer Channel Effectiveness</strong> This one held up. Influencer is the weakest channel by every metric that matters:</p><p>Metric Influencer Best Channel (Organic/SEO) Churn Rate 55.3% 41.2% Avg CAC $115 $35 LTV/CAC Ratio 8.6x 29.6x Avg CLV $983 $1,037</p><p>The fix is not to eliminate influencer spend. It is to restructure the contract model from flat fee per post to performance-based pay per 90-day retained user, with unique promo code tracking per influencer. This removes attribution ambiguity and aligns incentives.</p><p>Projected outcome: CAC -25%, churn -10%, net gain <strong>+$67,575</strong> &#8212; the largest standalone improvement of any single intervention.</p><div><hr></div><h2>The Number Nobody Was Asking About</h2><p>Here is where the analysis went somewhere I did not expect.</p><p>Scenario A (Referral Reward) and Scenario B (Influencer Reform) combined produce <strong>$83,346 in net incremental value</strong>. That is real. But it only measures efficiency gains on the existing customer mix.</p><p>The bigger question is: what happens when you look at where the acquisition budget is actually going versus where it should go?</p><p><strong>LTV/CAC ratios by channel:</strong></p><p>Channel LTV/CAC Verdict Organic/SEO 29.6x Scale immediately Email Re-engage 23.8x Scale with caution Referral 18.0x Scale with incentive Paid Search 11.9x Maintain Paid Social 11.0x Monitor Influencer 8.6x Reform contracts TV/CTV 8.0x Reallocate budget</p><p>There is a <strong>21-point spread</strong> between the best and worst channel. Every dollar sitting in TV/CTV at 8.0x that moves to Organic/SEO at 29.6x generates 3.7x more value &#8212; before any churn improvement, before any new product feature, before any pricing change.</p><p><strong>Scenario D</strong> takes the CAC savings from Influencer reform ($22,138) and redirects the TV/CTV budget (50% to Referral, 50% to Organic/SEO). Zero net new spend. Same acquisition budget, different allocation.</p><p>The result: <strong>+$1,321,154 in new customer lifetime value</strong> from 1,246 additional higher-quality customers.</p><p>Combined with Scenarios A and B: <strong>$1,404,500 total incremental value &#8212; a 29.8% revenue lift on the same spend.</strong></p><p>That is the number. Not the 1.5 percentage point churn reduction. The churn reduction is the mechanism. The capital reallocation is the outcome.</p><div><hr></div><h2>The 24-Month Forecast</h2><p>I built a quarterly forecaster using:</p><ul><li><p>5,000-customer base</p></li><li><p>$82.38 average monthly revenue per customer</p></li><li><p>2.65% monthly churn rate</p></li><li><p>~268 new monthly acquisitions (current run-rate)</p></li></ul><p><strong>Baseline vs Scenario D &#8212; quarterly revenue:</strong></p><p>Quarter Baseline Scenario D $ Uplift Y1 Q1 $723,982 $727,228 +$3,246 Y1 Q2 $861,371 $870,035 +$8,664 Y1 Q3 $988,116 $1,002,798 +$14,682 Y1 Q4 $1,105,043 $1,126,222 +$21,179 Y2 Q1 $1,212,912 $1,240,964 +$28,052 Y2 Q2 $1,312,425 $1,347,634 +$35,209 Y2 Q3 $1,404,229 $1,446,802 +$42,573 Y2 Q4 $1,488,920 $1,538,993 +$50,073</p><p><strong>Year-over-year growth rate:</strong></p><ul><li><p>Baseline: +47.3% (Y1 &#8594; Y2)</p></li><li><p>Scenario D: <strong>+49.6%</strong> (Y1 &#8594; Y2)</p></li></ul><p><strong>24-month totals:</strong></p><ul><li><p>Baseline: $9,096,998</p></li><li><p>Scenario D: <strong>$9,300,676</strong></p></li></ul><p>The uplift compounds because better-quality customers churn less, order more, and generate higher CLV over time. By Y2 Q4 the quarterly revenue gap has grown to $50K &#8212; from $3K in Q1. That is the compounding effect of channel mix correction showing up in the numbers.</p><div><hr></div><h2>Recommendations Summary</h2><p><strong>1 &#8212; Tiered Referral Reward (Implement + A/B Test)</strong> $10 credit at signup + $25 at 90-day mark, both referrer and referee. Run 90-day A/B test. Scale if CLV delta at 6 months exceeds $35 and churn reduction hits 5%. Kill if neither.</p><p><strong>2 &#8212; Influencer Performance Contracts (Implement Now)</strong> Move from flat fee to pay-per-90-day-retained-user. Tier by audience size. Unique promo code per influencer for full attribution. Non-renewal trigger: any 2 of 3 &#8212; ROAS below 1.5x, CAC payback over 18 months, churn above 70%.</p><p><strong>3 &#8212; Spend Reallocation (Implement Now, Zero New Budget)</strong> Redirect TV/CTV spend 50/50 to Referral and Organic/SEO. Apply Influencer CAC savings to Referral scaling. No new budget required. Expected outcome: $1.3M in additional CLV over 24 months.</p><p><strong>4 &#8212; Deprioritize (Zone 4 Delivery)</strong> Zone 4 delivery improvement from 6 to 5 days produces a 2&#8211;4 percentage point on-time rate improvement. Meaningful, but not a primary churn driver. Does not warrant prioritization over the channel interventions above.</p><div><hr></div><h2>What I Would Build Next</h2><p>The natural next step is connecting this model to live product data. The framework is built &#8212; cohort retention pivot, decision tree, channel-level LTV/CAC ratios, 24-month forecaster. The only thing missing is an event stream from the actual app.</p><p>With that I would add: feature-level engagement as a churn predictor (does using voice-guided cooking change retention?), first-order-to-second-order conversion rate as an early signal, and NPS trigger &#8594; proactive outreach automation.</p><p>That is the article for another day.</p><div><hr></div><p><em>Data benchmarked to HelloFresh SE (ETR: HFG) Annual Reports 2021&#8211;2024 | hellofreshgroup.com/investor-relations | All customer data modeled and simulated for analytical purposes. Decision tree classifier built with scikit-learn. Forecasting model built on cohort survival analysis.</em></p><p><em>&#8212; Derek Bowens | dbowens15@gmail.com | linkedin.com/in/derek-bowens</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://signal2capital.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Signal2Capital! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>