Git is a tool programmers use to keep every version of their code. Each saved version is called a commit, and you can always go back to an old one. Data versioning does the same for data. A version is a dataset exactly as it was at one moment. Data versioning means keeping those versions. It also means giving each one a name you can find again.
Why does a model need it? Because training data does not stay still. New rows arrive every day. Old rows get changed. A refund changes a sale from last month. A labeller (a person who marks each example with the right answer, called its label) fixes a wrong label. If you only keep the latest copy, last month's data is gone, even though the table still has rows with last month's dates.
My Data Versioning lesson measured this on a real shop's sales table, 1,047,877 sale lines over two years. When a customer returned an item, the shop changed the old sale record. This happened 16,675 times. Half of these changes were made more than 10.1 days after the sale (measured). So the lesson asked a simple question about a model trained at week 51. Can we get its rows back by keeping only the rows in today's table dated before week 51? No. 953 of the 490,766 lines were different (measured). Some had later returns. Some had been deleted because a customer asked for their data to be removed.
Under 0.2% sounds small. But my lineage and rollback lesson (lineage means the record of where data came from) measured what a small change can do. It corrected under 1% of a model's old labels and trained the model again. The new model gave a different answer on 250 of 6,000 rows (measured, on the Elec2 electricity dataset). You cannot rebuild last month's model if its data changed after it was trained.
A well-known 2015 Google paper, "Hidden Technical Debt in Machine Learning Systems", warns about the same thing: machine learning systems break when the data they depend on changes.