How to pick the students with the greatest improvement based on ZScore? I work for a school.
I have a pool of data from past examination results. For example, John did five tests so far and his marks look like this: 60, 70, 55, 80, 60. I then convert them to ZScore. They may look like this: 0.33, 0.50, -0.02, 1.2, 0.57
My question is: from a pool of data, how do I find the students who have been improving in his study? Obviously, the above example student John does not show any improvements. But, assuming that another student Mary has the following  ZScore: 0.33, 0.50, 0.55, 0.70, 1.29 Then I may be able to say that Mary is improving. And she is one of the many students I would like to see.
I am thinking of drawing a line based on the data. (i.e. y = mx+c). If the slope is trending up, then it is a positive trend.
 A: There are several distinct ways you could reasonably conceive of and quantify improvement. The approach you describe, of doing linear regression with each student on the test number and taking the slope as your measure of improvement, is one choice. Another is the same except using the date on which the test was administered rather than the test number, assuming that we expect less rapid change between tests that are conducted closer to each other in time. Another is to look at each student's biggest single increase among his or her four differences between adjacent tests. More complex approaches, perhaps considering all the students at once in a single multilevel model, can also be imagined.
I should point out that if you're interested in comparing improvements between students, you shouldn't use within-test z-scores. Why? Suppose two tests are scored out of 100, and everybody's raw score on test 2 turns out to be their raw score on test 1 plus 5. Everybody's z-scores will be then be the same on both tests, indicating no improvement, although looking at the raw scores, there's evidence of improvement across the board. Raw scores have their own deficiencies, of course, but don't be too hasty to normalize.
A: Do not use $z$-scores because if you normalise the way you present it you are normalising across time and within a subject (student). If you do that any comparisons between different students are invalid as their scores between  different student are not normalised using the same constant.
If you want to use $z$-scores you should be normalising cross-sectionally across all subjects. That means that in any particular time-point you aggregate all your students' scores and normalise them into a particular $z$-scores. This standard operating procedure in growth-modelling for children. For example, the WHO routinely gives z-score growth chart of children at a particular age and sex group.
What you want to look up is longitudinal data analysis (LDA). Your question about "which subject (student) has the largest (positive) change" is a typical question associated with these models. Using standard LDA, should be relatively easy if you have a measurements at fixed time-points. This methodology works both with normalised and unnormalised data. As @Kodiologist (+1) concludes using a multilevel (aka random-effects) model is probably the best option. Some standard references on the subject are the books: Analysis of Longitudinal Data by Diggle et al., Longitudinal Data Analysis Hedeker and Gibbons.
There are quite a few paper in the particular area you focus already; see for example: A Multi‐Level Analysis of School Improvement: Changes in Schools' Performance over Time by Gray et al., Stability  and  Consistency  of  School  Effects  and  the  Implications for  School  Improvement  Interventions:  The  Case  of  Botswana by Mohiemang & Pretorius.
In general, check the research conducted in University of Bristol's Centre for Multilevel Modelling, I think it relates with what you want to do. Their work as a lot of application in education and assessing students' performance so I suspect you can find something that matches your general setting relatively closely.
