<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Data Scientist, Study Thyself</title>
  <subtitle>Colin Mills&#39;s Blog</subtitle>
  <link href="https://web.colinmills.net/feed/feed.xml" rel="self" />
  <link href="https://web.colinmills.net/" />
  <updated>2026-04-23T00:00:00Z</updated>
  <id>https://web.colinmills.net/</id>
  <author>
    <name>Colin Mills</name>
  </author>
  <entry>
    <title>Precision in the Periphery - Forecasting and Simulation at Verizon</title>
    <link href="https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/" />
    <updated>2026-04-23T00:00:00Z</updated>
    <id>https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/</id>
    <content type="html">
&lt;p&gt;While I was at Verizon, I was in the supply chain division of the wireless group, tasked by my manager with helping the team reduce accessory inventory.  This was becoming a bigger and bigger problem as time went on, as accessories shifted from phone cases and screen protectors to high-end bluetooth devices and even drones.  These are big ticket items that we need in store for merchandising, but with very intermittent demand and larger costs, this represented a challenge in managing inventory. If we ordered too much inventory and sent it to the stores, this inventory risked being stranded, with no one to purchase it until we either pay to ship it back to the warehouse or heavily discount the accessory to free up space in the store.  If we did not order enough, customers would arrive to purchase a phone and not be able to have the accessories they want, which is not the experience we wanted the customer to have. Combined with large new phone launches driving a large initial spike in demand for associated accessories that might not last, we needed to get smarter about forecasting demand and allocating units.&lt;/p&gt;

&lt;p&gt;Traditional supply chain techniques for the stocking problem involve predicting the future volume of sales over a time period and shipping that quantity to arrive at the beginning of the period, with a margin of error added on top to buffer against the uncertainty in the predicted demand.  When the demand signal is very low and intermittent, the usual time-series forecasting models were not effective, as the assumptions of these models are seldom satisfied for these SKUs (e.g. residuals are not normally distributed).  We also need to do this for a very large number of SKUs, as each phone model has a large amount of possible accessories, including multiple phone cases and screen protectors for each size for each vendor selling with us, for both new models and older models. The demand can also be very volatile, as phone-associated SKUs are highly correlated with the phone sales, which are offered on promotion or discount often, causing a spike in the accessory demand. We needed a custom method to deal with this situation.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/vqQK4F4oDf-5749.avif 5749w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/vqQK4F4oDf-5749.webp 5749w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/vqQK4F4oDf-5749.jpeg&quot; alt=&quot;Two people looking at smartphones&quot; title=&quot;Two people looking at a smartphones&quot; width=&quot;5749&quot; height=&quot;3838&quot;&gt;&lt;/picture&gt;&lt;/p&gt;

&lt;p&gt;The method we developed included a two prong approach.  For the initial launch of the phone, we used the marketing forecast of the phone itself and used an attach rate derived from similar launches and products to try and capture the first wave of demand.  For the rest of the phone&#39;s life, however, sales are not as well correlated to the phone&#39;s launch.  In this method, we find that the main driver of replenishment to the stores was not sales, but keeping minimum inventory on the shelves for merchandising (i.e. to keep the shelves full).  We turned our attention to trying to figure out what the shelf space we needed for each phone model, or in other words, what the minimum inventory we needed.  The solution we landed on was store-level simulation using historical data.&lt;/p&gt;

&lt;p&gt;Once we have either historical time series data, either from the SKU in question or a similar SKU, we can simulate sales at different minimum values, calculating the maximum forecast error over the lead time of the SKU. (i.e. how far off our prediction is by the time the order from the warehouse makes it to the store).  Once this is calculated, we can talk to the merchandising department and recommend minimum values that strike an appropriate balance between service level (or approximately the probability that the SKU is out of stock when you want it) and stranded inventory at the store.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/XNXTiQY__x-6146.avif 6146w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/XNXTiQY__x-6146.webp 6146w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://web.colinmills.net/blog/forecasting-and-optimization-at-verizon/XNXTiQY__x-6146.jpeg&quot; alt=&quot;Man in suit giving two thumbs up&quot; title=&quot;Man in suit giving two thumbs up&quot; width=&quot;6146&quot; height=&quot;4097&quot;&gt;&lt;/picture&gt;&lt;/p&gt;

&lt;p&gt;This was a major contributor to hitting our inventory valuation goal, with the total share of accessory on hand staying relatively constant while making up a larger proportion of our revenue year over year.  Key takeaways for me from this is that when you can simulate a system, you are one step closer to optimizing it.  Being able to show our stakeholders what would have happened if we had some something differently is very vital to getting buy in both beforehand and during the project, giving them confidence that we have looked for the best solution that balances all business interests.&lt;/p&gt;

</content>
  </entry>
  <entry>
    <title>Games of 2025</title>
    <link href="https://web.colinmills.net/blog/games-of-2025/" />
    <updated>2025-07-09T00:00:00Z</updated>
    <id>https://web.colinmills.net/blog/games-of-2025/</id>
    <content type="html">&lt;p&gt;Games I&#39;ve played in 2025:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Guardians of the Galaxy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fine adventure, with decent combat and fun writing.  I only noticed repeating quips at the end.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Starvaders&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Great roguelite deckbuilder with a grid combat system - highly recommended&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;9 Kings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another roguelite deckbuilder, but with tower defense&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spellrogue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fun dice dungeon game&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Civilization VII&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hopefully going to get better&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sunderfolk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Great couch co-op Gloomhaven game&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Barony&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fun true rogue-like first person RPG&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Warhammer Space Marine 2&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Doom: The Dark Ages&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fun twist on the rebooted Doom formula heavily featuring a shield/block mechanic&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rift of the Necrodancer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;New take on the Necrodancer songs with a vertical track note stream&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tales of Kenzera: Zau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Emotional Metroidvania about mourning a parent&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blue Prince&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Great puzzle house building game&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avowed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sometimes you just wanna be a demigod and play in a fun RPG world&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>An Excellent Julia Notebook</title>
    <link href="https://web.colinmills.net/blog/excellent-julia-notebook/" />
    <updated>2025-05-31T00:00:00Z</updated>
    <id>https://web.colinmills.net/blog/excellent-julia-notebook/</id>
    <content type="html">&lt;p&gt;As I skill up between jobs, I’ve started working through the Computational Thinking course on MIT from Fall 2020, and while I’m sure there’ll be a post about that course in the future, for now I just want to focus on one particular notebook and how it stood out to me as an excellent guide to an engaging interactive modeling.&lt;/p&gt;
&lt;p&gt;Before we talk about the notebook in general, a quick introduction to the course is in order to help set the stage.  The class is taught by many professors, including Grant Sanderson of 3Blue1Brown fame, and Alan Edelson, one of the creators of the Julia programming language.  It aims to teach undergraduates who may not be familiar with programming in general, as well as the skills involved in translating mathematical models and algorithmic thinking to code in particular, how to leverage the power of our computational world to understand complicated phenomena.  The third module of the course, focused on modeling climate and the intricacies of nonlinear dynamics, is where we encounter this exceptional Pluto notebook.&lt;/p&gt;
&lt;p&gt;A Pluto notebook is similar to a Jupyter notebook in form, but behind the scenes the implementation is very different.  A Pluto notebook is described as reactive, meaning that the current state of the entire notebook is described by the code in the notebook only. A more thorough explanation is available here. This capability allows for Pluto notebooks to be tinkered with endlessly (if build to accommodate it) and to be extremely transparent to the user.  The notebook is saved as a .jl file that can be executed by Julia without modification and will return the output of the final cell to the user.&lt;/p&gt;
&lt;p&gt;The excellent notebook is by Henri Drake and concerns a simple energy balance model for the Earth’s climate.  It starts with a high level physical derivation of the model as a differential equation, then converts it into a discrete model and solves it numerically, all the while allowing the user to modify parameters of the model and plotting many different aspects of the model (e.g. CO2 in the atmosphere, temperature over time, etc.).  The end result is an interactive, completely transparent model of the climate, with full control over all the variables.  I love this presentation, and Pluto notebooks overall for learning Julia. More info on Pluto can be found here.&lt;/p&gt;
</content>
  </entry>
</feed>