From the plot of your points, you can see that they are positioned on a surface of order 2, a so called Quadric. From the point plot you can also see, that z[x,y] is a multivalued function. You may now either turn the coordinate system, as Ulrich proposes, or, more general, find an implicit function representation of the surface.
Turning the coordinate system and them use Interpolation
is easy and should be done for a quick result. The transformation is simply:
RotationMatrix[{{0, -1, 1}, {0, 0, 1}}].# & /@ data
But let us look at the second, more general and complex possibility. Assume that the data is contained in the list "data".
The general implicit equation for a surface of 2. order is fun[{x,y,z}]==0, where:
fun[vec_] = 1 + {c1, c2, c3}.vec + vec.{{c4, c5, c6}, {c5, c7, c8}, {c6, c8, c9}}.vec;
where ci are the parameters of the surface. We may fit this equation to our data points using least square. The error is:
err = Total[(fun /@ data)^2];
sol = NMinimize[err, {c1, c2, c3, c4, c5, c6, c7, c8, c9}][[2]]
this gives us the parameters ci and the implicit equation describing the quadric (a so called algebraic variety): quadric[{x,y,z}]==0, where:
quadric[{x_,y_,z_}]= fun[{x,y,z}]/.sol
We may plot this quadric by:
Show[{Graphics3D[{Point[d]}, Axes -> True, AxesLabel -> {"x", "y", "z"}],
ContourPlot3D[quadric[{x,y,z}]==0, {x, -4, 4}, {y, -5, -.5}, {z, -1, 4}]
}]
For further work it is best to work withe the implicit form quadric==0. However
if an explicit form is needed, it is easier, as can be seen from the plot, to rotate the coordinate system so that the direction {0,1,1} is turned in the direction of the new z axis. By this z[x,y] becomes a single valued instead of a multivalued function:
quadricturned[{x_, y_, z_}] = quadric[RotationMatrix[{{0, 0, 1}, {0, -1, 1}}].{x, y,z}];
Show[{Graphics3D[{Point[ RotationMatrix[{{0, -1, 1}, {0, 0, 1}}].# & /@ data]}, Axes -> True,
AxesLabel -> {"x", "y", "z"}],
ContourPlot3D[quadricturned[{x, y, z}] == 0, {x, -3, 3}, {y, -3.5, 2}, {z, 1.5, 4}]}]
Now we can get the single valued z[{x,y}]. Because we have a quadratic equation, we still get 2 solutions. However, all our points are on one single solution and not on two as before. We therefore only need the second branch:
fz[{x_, y_}] =
z /. Solve[quadricturned[{x, y, z}] == 0, z][[2]] // Simplify;
Show[{Graphics3D[{Point[
RotationMatrix[{{0, -1, 1}, {0, 0, 1}}].# & /@ data]},
Axes -> True, AxesLabel -> {"x", "y", "z"}]
, Plot3D[fz[{x, y}], {x, -3, 3}, {y, -3.5, 2}]}]