It was rumored that updates to the MacBook Pro were coming at WWDC. These rumors did not pan out. Instead it looks like the new MacBook Pro will be landing sometime later this year, possibly due to delays in availability of high end Skylake 45w mobile parts. This seems plausible, given that Intel only released its Skylake quad core NUC in mid-May. The magnitude of these delays has certainly made its way around the tech press, but are these delays really exceptional?

This quick exploratory analysis of the significance of these delays was performed using historical delays between iterations. The source of this release dates was from the Wikipedia pages for each of these products. A csv file including this data has been made available here. For the retina and non-retina release dates are given for only the retina versions of products once they become available.

Notably absent from this analysis is the MacBook Air and MacBook. In the former case the dates were not present on the Wikipedia article, and in the later case there wasn't sufficient data to do anything but interpolate.

## Overview

For this exploratory analysis two models were used. The first model, linear regression with one predictor (see Figure 1.), assumes that there is a constant interval between releases over time. Deviations from this release cycle are just model error. The second model is a differenced regression model. In this linear model, release dates are replaced with differences between release dates. This allows for a trend in the release dates, such as increasing delays between releases.

This analysis treats future releases and delays as a prediction problem. Therefore, prediction intervals are used to determine significance. The level of significance is set to 5% for the two sided interval, however our interest is really at large delays giving us a one-sided confidence level of to 2.5% for our analysis. Inference including point estimates and prediction intervals are based on standard ordinary least squares (OLS) assumptions. In both models, time is treated as the dependent variable with product iteration as the independent variable. Time is represented as days since epoch, where epoch is set at 0 equal to January 1, 1970.

This problem is actually a wait-time problem, so normality is used as an approximation to modeling with gamma distributed errors or other slightly more difficult approaches. Still, the regression approach seems to be 'good enough' for this blog post. In the future I'll revisit more complex models.

macRelease <- read.csv('macrelease.csv')

macRelease$releaseDate <- as.Date( macRelease$Release.date,
format="%d %B %Y")

library(ggplot2)
theme_set(theme_gray(base_size = 20))

# plot product release dates by iteration
p <- ggplot(macRelease,
aes(x=Iteration, y=releaseDate, group=Product))

p + geom_line(aes(color=Product),size=1) +
geom_point(aes(color=Product),size=3) +
labs(
title='Apple Product Iteration by Release Date',
y="Release Date")


The significance of the results differ considerably by model. According to the first model used, all but the 27" iMac are past the expected release date. Of these delayed products, all but the 21.5" iMac, has a significant delay.

# linear model by product
library(dplyr)

#get unique factors as string
currentProducts <- unique(macRelease$Product) # create a place to save our predictions releaseInterval <- c() # get a specific product for( i in 1:length(currentProducts)) { currentProduct <- filter(macRelease,Product==currentProducts[i]) # produce a product scatterplot with a linear model overlay p <- ggplot(currentProduct, aes(x=Iteration, y=releaseDate)) + geom_point() p <- p + geom_smooth(method ="lm",se=TRUE) + labs( title=currentProducts[i], x="Iteration", y="Release Date") plot(p) # converting time to something linear we do our prediction fit <- lm( as.numeric(releaseDate) ~ Iteration, data=currentProduct) pred <- predict( fit, data.frame( Iteration=nrow(currentProduct)+1), interval="prediction") releaseInterval <- rbind( releaseInterval, pred) }  rownames(releaseInterval) <- currentProducts # using epoch we get a date range conversion start.date <- as.Date("1970-01-01") releaseInterval <- as.data.frame(releaseInterval) releaseInterval$fit <-  as.character(as.Date(releaseInterval$fit,origin=start.date)) releaseInterval$lwr <-  as.character(as.Date(releaseInterval$lwr,origin=start.date)) releaseInterval$upr <-  as.character(as.Date(releaseInterval$upr,origin=start.date))  Summary of Expected Release Dates and a 95% Prediction Interval Product Expected Release Date Lower Bound Upper Bound iMac 27 2017-03-28 2016-02-02 2018-05-22 iMac 21.5 2016-06-19 2015-06-13 2017-06-27 Mac Mini 2014-01-26 2012-03-02 2015-12-22 Mac Pro 2015-04-15 2014-06-20 2016-02-08 MacBook Pro 13 2016-01-02 2015-07-08 2016-06-29 MacBook Pro 15 2015-07-11 2014-10-10 2016-04-09 The second model is a bit more accepting of delays. The MacBook Pros and the Mac Pro have significant delays, marginally so for the Mac Pro. The significance of the 15" MacBook Pro is in part to it's highly regular release schedule. The negative values in the lower bound indicate that the normality assumption may be problematic. Summary of Expected Delays Between Products and a 95% Prediction Interval Product Expected Delay (Days) Lower Bound Upper Bound Delay as of 29 July, 2016 iMac 27 213.61 -242.05 669.27 290.00 iMac 21.5 317.64 -244.61 879.90 290.00 Mac Mini 565.73 -101.98 1233.44 653.00 Mac Pro 603.40 257.63 949.17 953.00 MacBook Pro 13 220.33 0.09 440.57 508.00 MacBook Pro 15 273.71 113.57 433.85 437.00 In both models the delay before the release of the latest Mac Mini is a fairly significant outlier. This increase in delay may indicate a change in update frequency. If this is a change in frequency, then inference using the first model with OLS assumptions is inappropriate due to the error term not being identically distributed. The presence of a good covariate may fix this issue, but it is unknown what covariate would describe this delay. The difference model may also be inappropriate under this change due the presence of heteroscedasticity. diffInterval <- c() #get a specific product for( i in 1:length(currentProducts)) { currentProduct <- filter(macRelease,Product==currentProducts[i]) # get differences refreshDiff <- cbind( diff(currentProduct$releaseDate),
2:nrow(currentProduct)
)

# add on some column names and make a data frame
colnames(refreshDiff) <- c('Days','Iteration')
refreshDiff <- as.data.frame(refreshDiff)

# converting time to something linear we do our prediction
fit <- lm( as.numeric(Days) ~ Iteration, data=refreshDiff)
pred <- predict(
fit,
data.frame( Iteration=nrow(refreshDiff)+1),
interval="prediction")

# get the difference between the last date, and today's date

### Mac Pro

Expected Update: 2015-04-15 with 95% prediction interval (2014-06-20, 2016-02-08).

The first model (Figure 9.) shows a fairly regular update cycle for the Mac Pro. Based on this regularity we would expect an update sometime around last month. This of course hasn't happened, as seen by my aging 2006 Mac Pro and my full piggy bank. This change in release date can't be adequately explained by lack of drop in CPU replacements, given that the 2011 pin Haswell and Broadwell chips have been skipped. Therefore, it is unclear if Apple is waiting for the next Intel chip or the second coming for a future update.

The second model (Figure 10.) agrees with the first with respect to the delay being significant. This model further shows an increase in the delay between releases; as mentioned earlier, there doesn't seem to be any obvious reason for this delay.

Like the Mac Mini, Apple doesn't provide breakouts for sales for just the Mac Pro so it is hard to determine if it was a flop or not. Even if it was a flop, there is always the argument for an aspiration product. But, it is not clear if this product is really aspiring, or if gazes have moved to more mobile devices.

### MacBook Pro 13"

Expected Update: 2016-01-02 with 95% prediction interval ( 2015-07-08, 2016-06-29).

There isn't that much to say about the MacBook Pro 13", it's late. Furthermore, it's significantly late relative to other delays. Current rumors point to a release in Q4 2016, so the wait should come to an end soon.

The second model points to a decrease in delays, but the variability is sufficiently high to reverse directions after a few late releases.

### MacBook Pro 15"

Expected Update: 2015-07-11 with 95% prediction interval (2014-10-10, 2016-04-09).

Like the 13" model the 15" MacBook Pro is likely to get an update soon. Unlike the 13", the 15" model seemed to have slightly less variance, this seems to be at least in part due to the discrete GPU in the more recent models. If we take a look at the last update in the MacBook Pro line, it met it's release date not by upgrading the CPU but by only upgrading the GPU.

As far as the change in release rate goes, it seems to be increasing. It will be interesting to see if this change extends to align with Intel's latest delays on Kaby Lake, or if Apple is happy to just exchange discrete graphics to keep up the cadence.