This Data Model Shows MH370 Could Not Have Flown “Accidentally” To Its Destination

None of the plane’s paths can be reconciled with a geodesic, meaning the plane took multiple, intentional turns before going dark.

This Data Model Shows MH370 Could Not Have Flown “Accidentally” To Its Destination
[Image via Wikipedia]

Over the past two weeks, FastCoLabs has been building a Monte Carlo model to predict potential paths of MH370. I wrote about Version 1 last week and after the piece hit Reddit I added a more technical description. Now I’ve updated and extended the model, using information that wasn’t yet available earlier.


Picking Up Where We Left Off

We last left off with a relatively simple Markov Chain Monte Carlo (MCMC) model, trying to predict possible flight paths for the missing airliner. I used the plane’s previous heading–assuming MH370 tended to along a similar direction as before, with some ability to turn–and the tendency to head to the last ping arc (8:11 am) at each time to probabilistically determine its subsequent locations.

See the post that sparked this discussion here: How I Narrowed Down The Location Of Malaysia Air Using “Monte Carlo” Data Models. Then read our followup entitled More About Our Methodology.

The last ping arc took into account enough distance on either side–through the standard deviation–to effectively cover an area which blanketed the other pings as well [1]. Each new location only depended on the heading of the previous step, while the ping arc probability grid which made the plane tend toward the last ping arc, remained constant.

Results consistently showed, across a range of reasonable variations, that MH370 “chose” the southern arc most frequently and ended off the Australian West Coast, confirming independent Inmarsat Doppler analysis identifying a similar area of ocean nearby:


5% error, normal distribution

Heading Off Criticism

Yet the normal distributions I used for the plane heading, and the probability grid, were still criticized for being, well, too normal. So I implemented two heading choice distributions as well, both quite popular in some circles (unit circles, actually): the Wrapped Cauchy and the Von Mises. Both generated heading selections that were similar and then dramatically different, from how I chose the heading in Version 1.

This project is also available as code: Part 1, Part 2, and Part 3, and as a full file via GithHub.


I also found the Inmarsat ping error range: a specialty satellite industry blog pointed out a careful calculation on PPRuNe [2], which determined 1º to 2º error. For the last ping, where the satellite was 40º from the plane’s perspective, this would mean error of 2.5% or 5% of the total distance between the satellite and the plane, measured by the lag time [3].

Here is one set of the results:

Von Mises, uniform distribution, 5% error

Wrapped Cauchy, quasi-uniform distribution, 5% error


All showed that if MH370 did a true random walk–picking plane headings which wandered any which way, and using just the ping arc to constrain MH370’s ultimate location–MH370 ends up all over the arc within its flight range. This was the uniform distribution so vaunted on Reddit, confirming my original intuition on how to not pick the heading.

Desserting The Data Through Cherry-Picking

Next, I wanted all the pings to make my model the Queen of them all. Enough infographics had shown multiple pings, and my error assumptions were accommodating enough, that with some effort in Mathematica, I could now plot all of the plane pings. So each time step would have its own unique ping, instead of ping-ybacking on the generous error assumptions of another ping. I also plotted the Great Circle path from MH370’s last known location to where it ended up in all of my models, a standard feature in the Python library I used [4]. Importantly, a Boeing 777 such as MH370 will either fly by magnetic bearing (unlikely just by eyeballing) or alternatively via the Great Circle to maximize fuel efficiency (via distance efficiency) between two waypoints.

Version 1 of the model simultaneously and independently came to the southern route conclusion; now, I wanted to see the complete picture of the flight. All of the plane’s possible locations, over the whole duration. I had not yet seen modeled, let alone guesstimated with specific scenarios in mind.


The National Transportation and Safety Board provided Australia with few possible paths to aid in the search, in a reserved or miserly manner, depending on your perspective. Malaysia, in turn, has released its own few paths; but none of them appeared to plot the pings arcs to see whether these paths were actually possible, let alone showing them in the plot.

Now, it was time to generate thousands of paths. Our simulation would be the ultimate pathfinder (sorry, Nissan!) No more cherry-picking several fortunate few. This would be equal opportunity, Monte Carlo style, which would lead to unequal outcomes [5] in a fraction of the time and expense of the traditional way you can narrow down potential paths of MH370.

Reconstructing The Pings, And Why This Is Right (On Average)

Several quick points about accuracy:

  1. The error I assume in each ping is still generous; the standard deviation is 2.5% and 5% of the last ping’s radius arc–which is more than the distance differences between the pings. So I am allowing for as much wiggle room as possible in terms of how I pick where the pings are; and then some.
  2. Even if the ping timings between the first ping and the last ping are not exact in an absolute sense, they certainly are in an average sense. Which means that using the plane’s ultimate location on the arc, as the end point for the Great Circle, is a sound strategy.
  3. Looking at where the plane is plotted over time, the conclusions are plain to see–there is just not enough wiggle room to adjust the ping spacings in a way that allow for a flight path which does not make turns contrary to what an autopilot would automatically pick.

MH370 Flight Trajectory Through All Pings

So, here are the results, with the realistic normal heading assumption of Version 1 along with the realistic options in Version 2 for Wrapped Cauchy [6] and Von Mises:

normal distribution, 5% error

normal distribution 2.5% error


Von Mises distribution, 5% error

Von Mises distribution, 2.5% error

Wrapped Cauchy distribution, 5% error


Wrapped Cauchy distribution, 2.5% error

Autopilot Analysis

Through many thousands of simulations of various parameters specific to MH370’s predicament, we now have a much better idea of what MH370’s flight paths could be. My model shows likelihoods for MH370, not a definitive location. Is it possible that what is most likely is not in fact the case? Yes, of course, but the very notion of a Monte Carlo is predicated on the odds, meaning this analysis comes with an unfortunate realization–even if you don’t want a scenario to be true, if all of the available information points to that, then it is the likely leading outcome.

What does this all mean? Autopilot is out of options. You see, here is the simple problem–none of the possible paths can be reconciled with a geodesic (Great Circle) which means that the plane turned at multiple points. How could it turn? Well, the plane was “flown” to its final location–either manually by a human, or by a program entered into the flight management system. These results strongly suggest that wherever MH370 is, the odds are that someone wanted it there.


Inmarsat Ping Timeline Table

2:11 am — First ping.

2:15 am — Last sighting of MH370 by Malaysia military radar.


3:11 am — Second ping. First ping after plane disappeared [7].

4:11 am — Third ping.

5:11 am — Fourth ping.


6:11 am — Fifth ping.

7:11 am — Sixth ping.

8:11 am — Seventh ping. Last full ping from MH370. (What earlier was thought of as the 5 th ping after disappearance, but is actually the 6th ping.)


8:19 am — Partial ping?! (Still not understood.)

Source: MH370 Article, Wikipedia.

Additional Note: TMF Associates blog, with insightful previous analysis, references a different set of aperiodic ping times from 2:11 am and 8:11 am, and an MH370 radar disappearance at 2:22 am, inferred from Inmarsat Doppler analysis. These are at odds with the Wikipedia timeline. I use the hourly pings for simplicity’s sake. The 2.5-5% error more than accounts for any timing discrepancies.

[1] 5%, 10%, and 20% of the distance from the last ping arc to the Inmarsat geostationary satellite, a coarse way to account for all pings with just the last one.

[2] Professional Pilots Rumor Network. No, I am not making this up !

[3] I was modeling 5%, 10%, and 20%, and trying to encompass multiple pings in that breadth, which wasn’t bad but could be improved on.

[4] Matplotlib Basemap. “You know you want it!”

[5] Probably a libertarian’s dream.

[6] Note that using a Wrapped Cauchy distribution splits roughly even-steven north and south; all of my other results show southern tendencies.

[7] Below 1 hour; accounted for in my model.