.. _Intro: Introduction ------------ Théorie et données ++++++++++++++++++ Le site `missingprofits.world `_ calcule ce que perd chaque pays aux paradis fiscaux. Mais comment rapatrier ces profits? Quel effet aurait une taxe sur la richesse pour réduire les inégalités? On a besoin de la théorie pour comprendre l'effet potentiel des incitatifs. Ensuite, les données pour estimer ces effets. Les économistes Emmanuel Saez et Gabriel Zucman s'intéressent à cette question avec théorie et données. .. image:: /images/justice.png :align: center :scale: 25% Une taxe sur le carbone pourrait être un bon moyen de lutter contre le réchauffement climatique. Mais quels sont les effets d'une telle taxe sur l'économie? En 2019, le Directeur parlementaire du Budget du Canada dans un `rapport `_ utilise un modèle d'équilibre général pour calculer ces effets. Le modèle utilise données et théorie. .. image:: /images/climat.png :align: center :scale: 25% Comment structurer le marché de la publicité sur internet? Quel est le prix de l'information? Comment rémunérer le classement dans les moteurs de recherche? Hal Varian est l’économiste en chef chez Google. Il est l'auteur d'un livre de théorie très populaire en microéconomie, mais aussi quelqu'un qui conjugue au quotidien données et théorie pour aider les entreprises de la nouvelle économie. Voir cette `entrevue `_ avec lui. .. image:: /images/rules.jpeg :align: center :scale: 75% Les données sont partout. La théorie aide à en faire du sens: - Comprendre les comportements (e.g. tester des théories) - Quantifier des effets pour porter des jugements sur des politiques - Tarification et optimisation en entreprise .. seealso:: Cet `article `_ de Judea Pearl, pourtant un des pionniers de l'intelligence articifielle, met en garde contre une utilisation des données sans cadre théorique. Voir cet entrevue avec John List, de l'Université de Chicago sur l'importance des données pour les entreprises mais aussi la nécessité d'avoir des gens qui peuvent les interpréter et les utiliser. .. raw:: html
Rappel mathématique +++++++++++++++++++ Les mathématiques sont essentielles, en particulier le calcul différentiel, afin d'analyser le comportement, mesurer l'effet de changements dans l'environnement (prix, taxes). Voici un (rappel) des concepts qui sont importants pour le cours. L’analyse marginale et les approximations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Comment décrire une fonction :math:`f(X)`? Fonctions généralement compliquées, fonctions linéaires simples... En python, voici comment écrire une fonction. .. code-block:: def f(x): return x**2 def g(x): return 1/x Localement, on peut faire une approximation de toute fonction pour :math:`X` près de :math:`X_0`: .. math:: f(X) \simeq f(X_0) + \alpha (X-X_0) Voici une approximation, pour un :math:`\alpha` donné: .. code-block:: def fa(x,x0,alpha): return f(x0) + alpha * (x - x0) Pour trouver le meilleur :math:`\alpha`, on a que pour :math:`X` près de :math:`X_0` .. math:: &f(X) \simeq f(X_0) + \alpha (X-X_0) \\ \\ \iff & f(X) -f(X_0) \simeq \alpha (X-X_0)\\\\ \iff & \alpha \simeq \frac{f(X) -f(X_0)}{X-X_0} En python, .. code-block:: x = 2 x0 = 1 alpha = (f(x) - f(x0))/(x-x0) Bien sur, on triche par on calcule la fonction à :math:`f(x)`! Comment faire sans calculer cette valeur? Utilisons ce concept de pente à un point, mais regardons une distance plus petite. En fait, minuscule. Donc, on peut définir .. math:: f'(X_0) = \lim_{\epsilon \to 0} \frac{f(X_0+\epsilon) - f(X_0)}{\epsilon} On peut toujours calculer une dérivée numériquement en utilisant un :math:`\epsilon` petit: .. code-block:: def fp(x0): eps = 1e-6 return (f(x0+eps) - f(x0))/eps et alors, l'approximation devient .. math:: f(X) \simeq f(X_0) + f'(X_0) (X-X_0) \\ f(x) - f(X_0) \simeq f'(X_0) (X-X_0) \\ \Delta f \simeq f'(X_0) \Delta X En python, on peut écrire .. code-block:: def fa(x,x0): return f(x0) + fp(x0)*(x-x0) Si on veut prédire le changement dans la valeur d'une fonction, la dérivée est donc très utile! Pour plusieurs types de fonctions, on peut trouver l'expression de la dérivée sans faire un calcul numérique... Bien sur, la dérivée nous donne une direction locale. Donc, l'approximation linéaire locale peut être une bonne approximation (pour une ligne par exemple) mais peut-être moins précise quand la fonction n'est pas linéaire. Ainsi, on en arrive à la règle suivante pour les approximations. .. important:: Une approximation est plus précise quand la distance :math:`\epsilon = X - X_0` est petite. La dérivée ^^^^^^^^^^ Voici des recettes: **Avec des constantes** - :math:`f(X) = b + aX`: :math:`f'(X) = a` - :math:`f(X) = \log X`: :math:`f'(X) = \frac{1}{X}` - :math:`f(X) = e^{aX}`: :math:`f'(X) = ae^{aX}` - :math:`f(X) = X^a`: :math:`f'(X) = a X^{a-1}` **Avec des fonctions** - Règle du produit: :math:`f(X) = a(X)b(X)`, :math:`f'(X) = a'(X)b(X) + a(X)b'(X)` - Règle du quotient: :math:`f(X) = \frac{a(X)}{b(X)}`, :math:`f'(X) = \frac{a'(X)b(X) - a(X)b'(X)}{b(X)^2}` - Règle de chaine: :math:`f(X) = a(b(X))`, :math:`f'(X) = a'(b(X))b'(X)` - Règle d'addition (et soustraction): :math:`f(X) = a(X) + b(X)`, :math:`f'(X) = a'(X) + b'(X)`. .. todo:: **Exercice A**: Trouvez les dérivées de :math:`f(X)=\sqrt{X},\frac{X}{1+X},\frac{1}{2}X^2 + 2X-10,(1+\frac{X}{2})^2`. .. todo:: **Exercice B**: Faire une approximation de premier ordre pour :math:`f(X)=\sqrt{X}`. **Approximations d’ordres supérieurs** Si la fonction a des dérivées supérieures non nulles, ou bien :math:`X` est loin de :math:`X_0`, l'approximation de premier ordre que nous avons vu produira une approximation assez mauvaise... Par ailleurs, on veut peut-être aussi caractériser des fonctions par autre chose que seulement leur pente. (est-ce une courbe, etc?). On peut pousser plus loin le concept d'approximation, - Polynome d’ordre 2 devrait être meilleur... - Alors, on approxime par deuxième ordre - Polynome d’ordre :math:`k`: on peut certainement généraliser. Ce type d'approximation est appelée approximation de `Taylor `_. On utilise alors les dérivées d’ordres supérieurs d’une fonction: .. math:: f(X) = f(X_0) + f'(X_0)(X-X_0) +\frac{1}{2}f''(X_0)(X-X_0)^2 + \ldots On dénote :math:`f'(X), f''(X)` ou :math:`\frac{d f}{d X},\frac{d}{d X}(\frac{d f}{d X}) = \frac{d^2 f}{d X^2}`. **Concavité et Convexité des fonctions** Une fonction est concave si pour tout point :math:`(X_1,X_2)` et tout :math:`0<\lambda<1`: .. math:: f(\lambda X_1 + (1-\lambda) X_2) \geq \lambda f(X_1) + (1-\lambda)f(X_2) et convexe si faux. On dit strictement concave (ou convexe) si les inégalités sont strictes (n'incluent pas zéro). .. note:: En d'autres termes, si pour toutes les pairs de points, la ligne qui les rejoints est en dessous de la fonction, la fonction est concave. Si c'est l'opposé, elle est convexe. **Approximation et maximum (minimum)** Considérons l’approximation de premier ordre .. math:: f(X_0+\Delta X) \simeq f(X_0)+ f'(X_0)\Delta X. Observons que: - Si :math:`f'(X_0)>0` un petit changement :math:`\Delta X>0` augmente :math:`f` - Si :math:`f'(X_0) <0` un petit changement :math:`\Delta X <0` augmente :math:`f` - Si :math:`X_0` est la solution de :math:`\max_X f(X)`, il faut que :math:`f'(X_0) =0`! C'est la condition de premier ordre (CPO) nécessaire. Considérons l’approximation de deuxième ordre pour voir si elle est suffisante: .. math:: f(X_0+\Delta X) \simeq f(X_0) + f'(X_0)\Delta X +\frac{1}{2}f''(X_0)\Delta X ^2 Pour un maximum (local), il faut que :math:`f'(X_0)=0` (condition de premier ordre, CPO) et :math:`f''(X_0)<0` (condition de deuxième ordre, CDO). Observons que: - Si :math:`f'(X_0) = 0`, mais :math:`f''(X_0)>0`, alors :math:`f(X_0+\Delta X) > f(X_0)`. - f’(X) doit être positif quand :math:`\Delta X <0` et négatif quand :math:`\Delta X>0`. .. warning:: La condition de premier ordre est nécessaire mais n'est pas suffisante. Une fonction qui a un point d'inflection, aura une CPO respectée sur le point de scelle sans pour autant que ce point soit un maximum. La CDO prévient de cas de figure. .. todo:: **Exercice C**: Trouvez l'optimum de la fonction :math:`f(X) = X(10-X)`. Dérivée partielle ^^^^^^^^^^^^^^^^^ Supposons la fonction :math:`f(X,Y)`. La dérivée partielle se fait en gardant fixes (ou exogènes) les autres variables: :math:`f'_X(X,Y) = \frac{\partial f(X,Y)}{\partial X}`. .. note:: Une dérivée partielle ne représente donc pas de difficulté additionelle. On peut revoir le cas de figure ici-haut, :math:`f(X) = aX` comme étant :math:`g(X,a) = a X` et donc :math:`g'_X(x,a) = f'(X) = a`. La différentielle totale ^^^^^^^^^^^^^^^^^^^^^^^^ Parfois, il est utile de regarder les combinaisons de :math:`(X,Y)` telles que :math:`f(X,Y) = \overline{f}`, i.e. la fonction donne la même valeur d'output. Ces combinaisons peuvent être trouvées en inversant la fonction: en isolant :math:`Y=g(X,\overline{f})`. Par exemple, considérons :math:`f(X,Y) = \log(X) + \log(Y)`. Fixons :math:`f(X,Y)=10`. Alors on peut trouver les combinaisons par :math:`Y = \exp(10 -\log(X))`. Mais on peut aussi décrire ces combinaisons en utilisant la différentielle totale (une approximation linéaire). On peut toujours décrire la forme d'une fonction à un point donné par: .. math:: \begin{aligned} df(X,Y) = f'_X(X,Y)dx + f'_Y(X,Y)dY\end{aligned} L'opérateur d dénote un changement. Si on pose :math:`df(X,Y)=0`, on peut réarranger pour obtenir .. math:: \frac{dY}{dX}\Bigr|_{df=0} = -\frac{f'_X(X,Y)}{f'_Y(X,Y)} On qualifie la dérivée par l'indice :math:`df=0` pour indiquer que c'est une dérivée obtenue en contraignant la valeur de la fonction à être constante. .. todo:: **Exercice D**: Trouvez :math:`\frac{dY}{dX}\Bigr|_{df=0}` par différentielle totale pour :math:`f(X,Y)=\log(XY)`. Homogénéité d'une fonction ^^^^^^^^^^^^^^^^^^^^^^^^^^ La dérivée partielle informe sur le comportement de la fonction quand un des arguments varie alors que les autres demeurent constants. Mais on pourrait aussi s'intéresser au comportement d'une fonction quand tous les arguments augmentent (ou diminuent) d'une même proportion. On utilise le concept d'homogénéité. Il y a deux façons de s'y prendre: Approche directe: Une fonction est homogène de degré :math:`r` si pour tout :math:`\lambda>0`, .. math:: f(\lambda X_1, \lambda X_2, ... \lambda X_n) = \lambda^r f(X_1,X_2,...,X_n) Théorème d'Euler: Si une fonction est homogène de degré :math:`r`, alors: .. math:: r f(X_1,X_2,...,X_n) = \sum_{i=1}^n \frac{\partial f}{\partial X_i}X_i. .. todo:: **Exercice E**: Trouvez le degré d’homogénéité de la fonction :math:`f(X,Y)=X^\alpha Y^\beta` des deux façons. Approximation et maximum ^^^^^^^^^^^^^^^^^^^^^^^^ On a besoin d'autant de CPO qu'il y a de variables de contrôle. Les conditions nécessaires sont .. math:: f'_X(X,Y)=0, \\ f'_Y(X,Y)=0 pour une fonction :math:`f(X,Y)`. La condition de deuxième ordre est plus compliquée et nous n'allons pas la couvrir. Maximisation avec contrainte ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Un problème contraint prend la forme: .. math:: \max_{X,Y} \{ f(X,Y): g(X,Y) \leq m\} **Le lagrangien** La méthode de `Lagrange `_ consiste à résoudre pour :math:`(X,Y)`, .. math:: \begin{aligned} f'_X(X,Y) - \lambda g'_X(X,Y) = 0 \\ f'_Y(X,Y) - \lambda g'_Y(X,Y) = 0 \\ g(X,Y) = m\end{aligned} où :math:`\lambda` est un multiplicateur de Lagrange. Ces trois équations sont les CPO du lagrangien: .. math:: \begin{aligned} \max_{X,Y,\lambda} L(X,Y,\lambda) = f(X,Y) - \lambda (g(X,Y)-m)\end{aligned} Le lagrangien :math:`L(X,Y,\lambda)` est une fonction objective modifiée qui permet de pénaliser un écart de la contrainte (pour s'assurer qu'elle soit respectée). On remarque que si :math:`\lambda = 0`, on a les deux CPO non-contraintes :math:`f'_X(X,Y)=0` et :math:`f'_Y(X,Y)=0` qui donnent une solution optimale sans avoir besoin de la troisième. Seulement si la contrainte est *mordante* (si :math:`\lambda \neq 0`) aurons-nous une solution différente... .. todo:: **Exercice F**: Maximisez la fonction :math:`f(X,Y) = \log X + \log Y` sous la contrainte :math:`X+Y \le m` par la méthode du lagrangien. Note sur les logarithmes ^^^^^^^^^^^^^^^^^^^^^^^^ .. note:: Dans les notes, nous utiliserons :math:`\log` en base :math:`e=2.718281828459` et non en base 10. Donc, il s'agit du logarithme naturel (:math:`\ln = \log_e`). Python utilise aussi la base exponentielle. Introduction à Python ^^^^^^^^^^^^^^^^^^^^^ Ce premier notebook devrait s'ouvrir sur Google Colab et vous permettre de faire vos début sur Python. |ImageLink|_ .. |ImageLink| image:: https://colab.research.google.com/assets/colab-badge.svg .. _ImageLink: https://colab.research.google.com/github/politeco/micro_fr/blob/main/DebutPython.ipynb Vous pouvez aussi consulter ce `site `_ pour davantage de matériel d'introduction sur Python.