Pourquoi le chiffre d'affaires a-t-il considérablement augmenté ?
Analyse de l’évolution du chiffre d’affaires du magasin
Un magasin cherche à comprendre pourquoi son chiffre d’affaires a fortement augmenté entre 2017 et 2018. C’est ce que nous allons tenter d’expliquer dans cette nouvelle Analyse Flash !
Données à ma disposition
J’ai trouvé un fichier CSV contenant l’ensemble de ses ventes au cours des dernières années. Ces données vont me permettre de valider ou d’invalider mes hypothèses, voire de mettre au jour un autre facteur, moins évident, caché dans les données !
df.head()
| Row ID | Order ID | Order Date | Ship Date | Ship Mode | Customer ID | Customer Name | Segment | Country | City | State | Postal Code | Region | Product ID | Category | Sub-Category | Product Name | Sales | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | CA-2017-152156 | 08/11/2017 | 11/11/2017 | Second Class | CG-12520 | Claire Gute | Consumer | United States | Henderson | Kentucky | 42420.0 | South | FUR-BO-10001798 | Furniture | Bookcases | Bush Somerset Collection Bookcase | 261.9600 |
| 1 | 2 | CA-2017-152156 | 08/11/2017 | 11/11/2017 | Second Class | CG-12520 | Claire Gute | Consumer | United States | Henderson | Kentucky | 42420.0 | South | FUR-CH-10000454 | Furniture | Chairs | Hon Deluxe Fabric Upholstered Stacking Chairs,... | 731.9400 |
| 2 | 3 | CA-2017-138688 | 12/06/2017 | 16/06/2017 | Second Class | DV-13045 | Darrin Van Huff | Corporate | United States | Los Angeles | California | 90036.0 | West | OFF-LA-10000240 | Office Supplies | Labels | Self-Adhesive Address Labels for Typewriters b... | 14.6200 |
| 3 | 4 | US-2016-108966 | 11/10/2016 | 18/10/2016 | Standard Class | SO-20335 | Sean O'Donnell | Consumer | United States | Fort Lauderdale | Florida | 33311.0 | South | FUR-TA-10000577 | Furniture | Tables | Bretford CR4500 Series Slim Rectangular Table | 957.5775 |
| 4 | 5 | US-2016-108966 | 11/10/2016 | 18/10/2016 | Standard Class | SO-20335 | Sean O'Donnell | Consumer | United States | Fort Lauderdale | Florida | 33311.0 | South | OFF-ST-10000760 | Office Supplies | Storage | Eldon Fold 'N Roll Cart System | 22.3680 |
Comme on peut le voir, les données sont très détaillées et propres : je n’aurai donc pas besoin d’effectuer une préparation importante avant l’analyse. Petit point d’attention : la colonne Customer ID permet d’identifier les clients de manière fiable. C’est donc elle que j’utiliserai, plutôt que la colonne Customer Name.
Commençons par afficher un graphique présentant l’évolution du chiffre d’affaires au fil des années, ainsi que celle du nombre de ventes.
Ce premier graphique permet déjà de faire deux constats :
- le chiffre d’affaires a bien augmenté entre 2017 et 2018 ;
- le nombre de ventes suit la même tendance.
Nous disposons donc d’une première piste : la hausse du chiffre d’affaires semble liée à une augmentation du volume de ventes.
Essayons maintenant de comprendre plus précisément les mécanismes de cette croissance.
Une augmentation du nombre de clients
Pour simplifier l’analyse, je vais créer deux nouveaux DataFrames : un pour chaque année.
df_2017 = df[df['Order Date'].dt.year == 2017]
df_2018 = df[df['Order Date'].dt.year == 2018]
n_customers_2017 = df_2017['Customer ID'].nunique()
n_customers_2018 = df_2018['Customer ID'].nunique()
nouveaux_2018 = n_customers_2018 - n_customers_2017
fideles = n_customers_2018 & n_customers_2017
perdus_2017 = n_customers_2017 - n_customers_2018
print(f"Nombre de clients 2017 : {n_customers_2017}")
print(f"Nombre de clients 2018 : {n_customers_2018}")
print(f"Nouveaux clients en 2018 : {nouveaux_2018}")
print(f"Clients fidèles (2017 et 2018) : {fideles}")
print(f"Clients perdus (2017 mais pas 2018) : {perdus_2017}")
Nombre de clients 2017 : 635
Nombre de clients 2018 : 690
Nouveaux clients en 2018 : 55
Clients fidèles (2017 et 2018) : 562
Clients perdus (2017 mais pas 2018) : -55
Les trois segments progressent en nombre de clients entre 2017 et 2018. Consumer reste largement le segment le plus important en volume, mais Corporate et Home Office progressent également.
La croissance du nombre de clients est donc relativement homogène : aucun segment ne progresse de manière spectaculaire pendant que les autres stagnent.
Pour les segments Consumer et Corporate, la croissance du chiffre d’affaires provient très clairement du volume - davantage de clients et davantage de ventes - plutôt que du panier moyen, qui a même légèrement diminué. Cela signifie que ces deux segments achètent, en moyenne, des produits un peu moins chers ou en plus petites quantités par transaction, mais que cette baisse est largement compensée par la hausse du volume.
Home Office est le seul segment pour lequel les deux facteurs évoluent dans le même sens : plus de clients et un panier moyen plus élevé.
Deux hypothèses se dégagent alors :
- un effet de mix produit : davantage de ventes dans des catégories moins chères, comme
Office Suppliesplutôt queTechnology; - un effet lié aux nouveaux clients : ceux-ci composent peut-être des paniers plus modestes que les clients historiques, ce qui serait cohérent avec une logique d’acquisition - on teste avant d’acheter davantage.
Pour départager ces hypothèses, nous allons croiser le montant moyen par vente avec le statut du client - nouveau ou fidèle - pour chaque segment. Nous pourrons ainsi déterminer si les nouveaux clients tirent réellement la moyenne vers le bas.
clients_2017 = set(df_2017['Customer ID'].unique())
clients_2018 = set(df_2018['Customer ID'].unique())
df_2018 = df_2018.copy()
df_2018['Statut'] = df_2018['Customer ID'].apply(
lambda x: 'Nouveau' if x not in clients_2017 else 'Fidèle'
)
montant_moyen_croise = df_2018.groupby(['Segment', 'Statut'])['Sales'].mean().unstack()
print(montant_moyen_croise)
montant_moyen_croise.plot(kind='bar', figsize=(9, 5), color=['coral', 'steelblue'])
plt.title("Montant moyen par vente en 2018 : nouveaux vs fidèles, par segment")
plt.xlabel("Segment")
plt.ylabel("Montant moyen (€)")
plt.xticks(rotation=0)
plt.legend(title="Statut")
plt.grid(True, alpha=0.3, axis='y')
plt.tight_layout()
plt.show()
Statut Fidèle Nouveau
Segment
Consumer 207.967388 167.241754
Corporate 220.269204 344.460433
Home Office 236.724059 265.069702

Le résultat est intéressant et invalide en partie notre hypothèse initiale : la situation varie fortement selon les segments.
Consumer: les nouveaux clients dépensent moins que les clients fidèles (167 € contre 208 €), ce qui confirme l’hypothèse pour ce segment ;Corporate: c’est exactement l’inverse, puisque les nouveaux clients dépensent beaucoup plus (345 € contre 220 €) ;Home Office: l’écart est plus léger, mais les nouveaux clients dépensent également un peu plus que les fidèles (265 € contre 237 €).
Pour résumer
- Nombre de clients : il augmente dans les trois segments (
Consumer,CorporateetHome Office). - Répartition entre clients fidèles, perdus et nouveaux : la croissance repose sur plusieurs facteurs. Les fidèles génèrent du chiffre d’affaires, les nouveaux clients apportent un volume supplémentaire, tandis que le départ de certains clients en retranche une partie.
- Panier moyen par segment : il diminue pour
ConsumeretCorporate, mais augmente légèrement pourHome Office. - Nouveaux clients contre clients fidèles : aucune tendance uniforme ne se dégage. Les nouveaux clients
Corporatedépensent davantage, tandis que les nouveaux clientsConsumerdépensent moins.
Jusqu’ici, nous avons surtout étudié les clients, mais encore assez peu le volume de ventes lui-même ou la répartition par catégorie de produits. Pour répondre rigoureusement à la question « Pourquoi le chiffre d’affaires a-t-il augmenté ? », il faudrait effectuer une décomposition du type :
delta CA = delta (nombre de ventes) × prix moyen + delta (prix moyen) × nombre de ventes.
Construisons donc un tableau de synthèse afin d’y voir plus clair :
synthese = pd.DataFrame({
'2017': {
'CA total': df_2017['Sales'].sum(),
'Nombre de ventes': len(df_2017),
'Nombre de clients': df_2017['Customer ID'].nunique(),
'Panier moyen (vente)': df_2017['Sales'].mean(),
'CA moyen par client': df_2017['Sales'].sum() / df_2017['Customer ID'].nunique(),
},
'2018': {
'CA total': df_2018['Sales'].sum(),
'Nombre de ventes': len(df_2018),
'Nombre de clients': df_2018['Customer ID'].nunique(),
'Panier moyen (vente)': df_2018['Sales'].mean(),
'CA moyen par client': df_2018['Sales'].sum() / df_2018['Customer ID'].nunique(),
}
})
synthese['Évolution %'] = (synthese['2018'] - synthese['2017']) / synthese['2017'] * 100
print(synthese.round(2))
2017 2018 Évolution %
CA total 600192.55 722052.02 20.30
Nombre de ventes 2534.00 3258.00 28.57
Nombre de clients 635.00 690.00 8.66
Panier moyen (vente) 236.86 221.62 -6.43
CA moyen par client 945.19 1046.45 10.71
Nous avons désormais notre réponse !
La hausse du chiffre d’affaires ne s’explique pas principalement par l’augmentation du nombre de clients, mais surtout par l’augmentation du nombre de ventes par client.
| Facteur | Évolution | Rôle |
|---|---|---|
| Nombre de clients | +8,7 % | Contribue à la croissance, mais modestement |
| Nombre de ventes | +28,6 % | Constitue le principal moteur |
| Panier moyen par vente | -6,4 % | Pèse légèrement sur la croissance |
| CA moyen par client | +10,7 % | Confirme que chaque client génère davantage de chiffre d’affaires |
Pour répondre à la question
La croissance du chiffre d’affaires en 2018 s’explique avant tout par une hausse de la fréquence d’achat des clients, c’est-à-dire par un plus grand nombre de commandes. Elle ne provient ni d’une augmentation du panier moyen ni principalement de l’acquisition de nouveaux clients, même si ceux-ci y contribuent également dans une moindre mesure.
commandes_par_client_2017 = len(df_2017) / df_2017['Customer ID'].nunique()
commandes_par_client_2018 = len(df_2018) / df_2018['Customer ID'].nunique()
print(f"Commandes/client 2017 : {commandes_par_client_2017:.2f}")
print(f"Commandes/client 2018 : {commandes_par_client_2018:.2f}")
Commandes/client 2017 : 3.99
Commandes/client 2018 : 4.72
Ces résultats confirment la conclusion : chaque client passe en moyenne 4,72 commandes en 2018, contre 3,99 en 2017, soit une hausse de 18,3 % de la fréquence d’achat par client. Cette évolution est cohérente avec l’écart observé entre la croissance du nombre de ventes (+28,6 %) et celle du nombre de clients (+8,7 %).
La croissance observée en 2018 semble donc davantage liée à un effet de fidélisation et d’engagement - les clients existants reviennent plus souvent - qu’à un effet d’acquisition pure ou de montée en gamme (upsell).
C’est plutôt une bonne nouvelle pour l’entreprise : il est généralement plus simple et moins coûteux de faire revenir des clients déjà acquis que d’en trouver de nouveaux !
Les données proviennent du dataset Superstore Sales sur Kaggle.