Well, this gets tricky and being new to game maker it probably isn't something you want to jump right into. But here are some guidelines.
By default, all objects draw themselves to the application surface. When you draw_sprite(), you're actually drawing a sprite to the application surface. Game Maker automatically draw that surface after the objects have all been drawn.
Generally you do not need to draw the application surface manually unless you have a good reason for it. One reason might be to apply a shader but only if you want the entire surface to be affected.
Now, if you instead want a single object to be shaded, you put the shader code in that object's draw code. Set the shader, draw the sprites, reset the shader. You don't mess with the application surface in this case.
Ok, say you want multiple objects shaded. You could add shader code to all those objects and be just fine. But let's say you want a LOT of objects shaded and you don't want to add code to ALL those objects. In this case you have a third option....
GameMaker draws objects in order by depth in descending order. You CAN set a shader in the draw code of an object and leave it open. Every object drawn after that will be drawn with the shader applied. Then make sure you have another object with a lower depth to reset the shader when it's done. For instance, you could have a shader_set object at a depth of 10, and a shader_reset object at a depth of 5, and anything with a depth of 9,8,7 or 6 will be shaded.