(elpy-nav-indent-shift-left) is a function call in lisp. You want to bind the key to the function, but instead you've bound it to whatever the function call returns. The best way IMO (but see @Drew's comment below) to do that is to say
(function <name>), so e.g.
(define-key elpy-mode-map (kbd "M-s-<left>") (function elpy-nav-indent-shift-left))
There is a reader macro that is equivalent:
(define-key elpy-mode-map (kbd "M-s-<left>") #'elpy-nav-indent-shift-left)
but most people write the quoted form as in the accepted answer:
(define-key elpy-mode-map (kbd "M-s-<left>") 'elpy-nav-indent-shift-left)
although the first two forms are (again IMO) preferable. The Elisp manual says this:
-- Special Form: function function-object
This special form returns FUNCTION-OBJECT without evaluating it.
In this, it is similar to ‘quote’ (*note Quoting). But unlike
‘quote’, it also serves as a note to the Emacs evaluator and
byte-compiler that FUNCTION-OBJECT is intended to be used as a
function. Assuming FUNCTION-OBJECT is a valid lambda expression,
this has two effects:
• When the code is byte-compiled, FUNCTION-OBJECT is compiled
into a byte-code function object (*note Byte Compilation::).
• When lexical binding is enabled, FUNCTION-OBJECT is converted
into a closure. *Note Closures::.
The read syntax ‘#'’ is a short-hand for using ‘function’. The
following forms are all equivalent:
(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))