دسته‌ها
Buiness Analysis Data Science Programming Python علمی

Asking Questions About our Data

Asking Questions About our Data
Thanks to Super Data Science we can look at a training data set with some sales data and gain some insights from it. Let’s take a little look at the data as it looks in Excel.

Upon initial inspection of the data, we can start thinking of some questions about it that we would want to answer.

What rep sold the most?
What item sold the most?
What region sold the most?


Loading the Data
Our data already has descriptive column names so that’ll be much easier for us since we won’t have to name the columns ourselves. But, we do need to understand what each of these columns mean to better understand our data.
To load the data into pandas, we must first import the packages that we’ll be using.
import pandas as pd
import numpy as np
We can use pandas to read in the CSV file with the read_csv method.

df = pd.read_csv("./OfficeSupplies.csv")
If there are no errors when executing then the file loaded with no errors. But now what do we do with it? Pandas takes the data and creates a DataFrame data structure with it. The DataFrame allows us to do quite a bit of analysis on the data. We can look at the number of rows and columns to get a quick idea of how big our data is.

df.shape

There are 43 rows and six columns in our data set. It’s not that big of a data set, but even small data sets can yield some good insights.

General Analysis of the Data
To get a quick idea of what the data looks like, we can call the head function on the data frame. By default, this returns the top five rows, but it can take in a parameter of how many rows to return.

df.head()

This looks a lot like an Excel spreadsheet, doesn’t it? Under the hood, the data frame is a two-dimensional data structure and each column can have different types. To show that, we can call dtypes attribute on the data frame to see what each column types are.

df.dtypes

Even though the first four columns are objects, we can see from the data that it’s text. Due to pandas using Numpy behind the scenes, it interprets strings as objects.

Next, we can look at some descriptive statistics of the data frame with the describe method.

df.describe()

This shows some descriptive statistics on the data set. Notice, it only shows the statistics on the numerical columns. From here you can see the following statistics:

Row count, which aligns to what the shape attribute showed us.
The mean, or average.
The standard deviation, or how spread out the data is.
The minimum and maximum value of each column
The number of items that fall within the first, second, and third percentiles.
We can tell a decent amount of our data from this, such as the average number of units sold is 49 and the average price of each unit is around $20.

Answering our Questions
Now we can do further analysis on our data to answer our questions. Before that, we should see if there are any missing values in our data set. In our current data set of 43 rows we can scan the data to tell there aren’t any missing values, but with much bigger data sets looking at the data by hand to find missing values will be too tedious. This is easy to do in pandas. To check if there are any missing values in the entire data set we use the isnull function, then see if there are any values.

df.isnull().values.any()

We’re lucky we have such a nice data set and with no missing values. While we won’t focus on it in this post, a data scientist will spend their time cleaning (or wrangling ) the data. Since we don’t have any missing data, we can start doing further analysis on our data.

Who sold the most?
The first question we had was what rep had sold the most. Pandas has a lot of utility functions for querying the data frame to help us out. To answer this we can group by the “Rep” column and sum up the values in the columns. Notice in the result that pandas only does a sum on the numerical columns. Then we do a descending sort on the values based on the “Units” column.

df.groupby(["Rep"]).sum().sort_values("Units", ascending=False)

Richard sold the most units, but did he sell the most in dollar amount? Does selling the most units mean the rep earned the most money? How can we determine that if there’s no column available to find that out? Pandas has you covered there, too. We can add columns to our data frame as we need (we can drop them, too, if they add too much noise to our data set). Pandas uses Numpy behind the scenes in the DataFrame object so it has the ability to do mathematical operations on columns, and it can do them quite fast.

df["Total Price"] = df["Units"] * df["Unit Price"]
df.head()

Here we create a new column on our data frame called “Total Price” and multiply the “Units” and “Unit Price” columns to calculate it. We call the head function again to make sure it got added.

Now we can find who sold the most in total dollar amount.

df.groupby("Rep").sum().sort_values("Total Price", ascending=False).head()
We do the same grouping of the “Rep” column and sum up the values, but now we do a descending sort on the “Total Price” column values and print out the results.

Richard may have sold the most units, but Matthew sold the most in terms of total price.

What region sold the most?

We now know who sold the most, but we also have a “Region” column. With this, we can see who sold the most within each region.

group = df.groupby(["Region","Rep"]).sum()
total_price = group["Total Price"].groupby(level=0, group_keys=False)
total_price.nlargest(5)

Now we group by two columns, “Region” and “Rep”, and sum those values up. With that result, we save it off into a new data frame. Then take the “Total Price” column and group the values. In our groupby function, we specify what level to group by since we already did the first grouping, which creates a hierarchical index on the data. Then we take the largest five of those to print out. From the results, we can tell that Matthew sold the most in the Central region, Susan in the East, and James in the West.

Another thing to note from this result: the Central region has the same number of reps than East and West combined. That could be something to bring up to the sales team when presenting the data.

دسته‌ها
محمد حسین ابراهیم زاده

Asking Questions About our Data

Asking Questions About our Data
Thanks to Super Data Science we can look at a training data set with some sales data and gain some insights from it. Let’s take a little look at the data as it looks in Excel.

Upon initial inspection of the data, we can start thinking of some questions about it that we would want to answer.

What rep sold the most?
What item sold the most?
What region sold the most?


Loading the Data
Our data already has descriptive column names so that’ll be much easier for us since we won’t have to name the columns ourselves. But, we do need to understand what each of these columns mean to better understand our data.
To load the data into pandas, we must first import the packages that we’ll be using.
import pandas as pd
import numpy as np
We can use pandas to read in the CSV file with the read_csv method.

df = pd.read_csv("./OfficeSupplies.csv")
If there are no errors when executing then the file loaded with no errors. But now what do we do with it? Pandas takes the data and creates a DataFrame data structure with it. The DataFrame allows us to do quite a bit of analysis on the data. We can look at the number of rows and columns to get a quick idea of how big our data is.

df.shape

There are 43 rows and six columns in our data set. It’s not that big of a data set, but even small data sets can yield some good insights.

General Analysis of the Data
To get a quick idea of what the data looks like, we can call the head function on the data frame. By default, this returns the top five rows, but it can take in a parameter of how many rows to return.

df.head()

This looks a lot like an Excel spreadsheet, doesn’t it? Under the hood, the data frame is a two-dimensional data structure and each column can have different types. To show that, we can call dtypes attribute on the data frame to see what each column types are.

df.dtypes

Even though the first four columns are objects, we can see from the data that it’s text. Due to pandas using Numpy behind the scenes, it interprets strings as objects.

Next, we can look at some descriptive statistics of the data frame with the describe method.

df.describe()

This shows some descriptive statistics on the data set. Notice, it only shows the statistics on the numerical columns. From here you can see the following statistics:

Row count, which aligns to what the shape attribute showed us.
The mean, or average.
The standard deviation, or how spread out the data is.
The minimum and maximum value of each column
The number of items that fall within the first, second, and third percentiles.
We can tell a decent amount of our data from this, such as the average number of units sold is 49 and the average price of each unit is around $20.

Answering our Questions
Now we can do further analysis on our data to answer our questions. Before that, we should see if there are any missing values in our data set. In our current data set of 43 rows we can scan the data to tell there aren’t any missing values, but with much bigger data sets looking at the data by hand to find missing values will be too tedious. This is easy to do in pandas. To check if there are any missing values in the entire data set we use the isnull function, then see if there are any values.

df.isnull().values.any()

We’re lucky we have such a nice data set and with no missing values. While we won’t focus on it in this post, a data scientist will spend their time cleaning (or wrangling ) the data. Since we don’t have any missing data, we can start doing further analysis on our data.

Who sold the most?
The first question we had was what rep had sold the most. Pandas has a lot of utility functions for querying the data frame to help us out. To answer this we can group by the “Rep” column and sum up the values in the columns. Notice in the result that pandas only does a sum on the numerical columns. Then we do a descending sort on the values based on the “Units” column.

df.groupby(["Rep"]).sum().sort_values("Units", ascending=False)

Richard sold the most units, but did he sell the most in dollar amount? Does selling the most units mean the rep earned the most money? How can we determine that if there’s no column available to find that out? Pandas has you covered there, too. We can add columns to our data frame as we need (we can drop them, too, if they add too much noise to our data set). Pandas uses Numpy behind the scenes in the DataFrame object so it has the ability to do mathematical operations on columns, and it can do them quite fast.

df["Total Price"] = df["Units"] * df["Unit Price"]
df.head()

Here we create a new column on our data frame called “Total Price” and multiply the “Units” and “Unit Price” columns to calculate it. We call the head function again to make sure it got added.

Now we can find who sold the most in total dollar amount.

df.groupby("Rep").sum().sort_values("Total Price", ascending=False).head()
We do the same grouping of the “Rep” column and sum up the values, but now we do a descending sort on the “Total Price” column values and print out the results.

Richard may have sold the most units, but Matthew sold the most in terms of total price.

What region sold the most?

We now know who sold the most, but we also have a “Region” column. With this, we can see who sold the most within each region.

group = df.groupby(["Region","Rep"]).sum()
total_price = group["Total Price"].groupby(level=0, group_keys=False)
total_price.nlargest(5)

Now we group by two columns, “Region” and “Rep”, and sum those values up. With that result, we save it off into a new data frame. Then take the “Total Price” column and group the values. In our groupby function, we specify what level to group by since we already did the first grouping, which creates a hierarchical index on the data. Then we take the largest five of those to print out. From the results, we can tell that Matthew sold the most in the Central region, Susan in the East, and James in the West.

Another thing to note from this result: the Central region has the same number of reps than East and West combined. That could be something to bring up to the sales team when presenting the data.

دسته‌ها
Buiness Analysis Data Science Python علمی محمد حسین ابراهیم زاده

python, Pandas Categorize the range

df[‘PriceBin’] = pd.cut(df[‘PriceAvg’], bins = 3)
df[‘PriceBin’].value_counts()

(۵۴۰۶۰.۰, ۲۰۴۰۰۰۰.۰]      ۲۰۹ 
(۲۰۴۰۰۰۰.۰, ۴۰۲۰۰۰۰.۰] ۴
(۴۰۲۰۰۰۰.۰, ۶۰۰۰۰۰۰.۰] ۱
Name: PriceBin, dtype: int64


df[‘PriceBin’] = pd.qcut(df[‘PriceAvg’], q=3)
df[‘PriceBin’].value_counts().sort_index()

(۵۹۹۹۹.۹۹۹, ۲۱۰۰۰۰.۰]    ۷۷
(۲۱۰۰۰۰.۰, ۳۱۵۰۰۰.۰]     ۶۶
(۳۱۵۰۰۰.۰, ۶۰۰۰۰۰۰.۰]    ۷۱
Name: PriceBin, dtype: int64

h = df.groupby(‘PriceBin’, as_index=False).median()[‘SalesAvg’]

h = pd.DataFrame(h)
h.reset_index(inplace=True)
h


PriceBin SalesAvg
۰(۵۹۹۹۹.۹۹۹, ۲۱۰۰۰۰.۰] ۴۲.۰۰۰۰۰۰۱
(۲۱۰۰۰۰.۰, ۳۱۵۰۰۰.۰] ۱۴۵.۱۶۶۶۶۷۲
(۳۱۵۰۰۰.۰, ۶۰۰۰۰۰۰.۰] ۱۱۴.۲۰۰۰۰۰

دسته‌ها
Buiness Analysis Data Science Python علمی محمد حسین ابراهیم زاده

Useful Python pandas codes

To Rename the data frame
df.rename(columns={“contract_id”:”deal_id”},inplace=True)

Where statement
tips[tips[‘time’] == ‘Dinner’].head(۵)

vlookup
mg = pd.merge(df,AgReg,on=”deal_id”,how=”left”)

choose the first column of an array or first part of a string with a delimitter
df[“cat”] = df[“CategoryID”].str.split(‘,’,1).str[0]

filling na or nan or Null values
df[“CategoryID”].fillna(“”,inplace=True)

Convert To date time
pd.to_datetime(df[“start_date”],errors=’ignore’)

combination of where and select some.
df[(df[‘CategoryName_Art’] == ۱)].iloc[0:5,:]

Get data ready for decision tree dmdf = pd.get_dummies(df[[‘ShamsiYear’, ‘ShamsiYearMonth’, ‘Brand’,       ‘CategoryName’, ‘SubCategoryName’,  ‘UnitPrice’, ‘SoldCoupon’,       ‘Area2’]])

دسته‌ها
شعر محمد حسین ابراهیم زاده

شعر کرونا

عمه فرمودند:
ای شاعر شیرین سخنم بازبگو
این. معظل ما وکل دنیاست بگو

چون ریشه‌ی عمر ما به کل دود شدست
اشک از غم مردم جهان رود شدست
تهدید کرونا عمه جان چیزی نیست
ماییم و محبتی که مفقود شدست

عمه فرمودند:
در خواب بدم ندایی آمد بر خیز
از نو گل خوب تو خبر می اید
دیدم که عزیز من غوغا کرده
هر کس زسر لطف نظر ها کرده

دیریست که کودکانه خوابیم عمه
رویای حباب روی آبیم عمه
دیریست به دیدار تو دلتنگ شدیم
عشقت چو شراب و جمله جامیم عمه

از اینهمه احساس گمانم برسد
دوستىم داری و انگار بیایی پیشم
خواهم که بدیدار من ایی یکدم
تا باز بگم هر انچه در دل دارم

سوگند به هرچه از خدا خواستنیست
مهر همه ی گروه پرداختنیست
افسوس که درمسیر دوریم ولی
یک بوسه به گونه ی شما کاشتنیست 💋

گر مهر ومحبتی ز من هست بدلت
خوشحالم کن و بریز بپای پدرت
من دختر عموی خویش را دارم دوست
بعدش پدرت که همره اوست دلت

{نفرستادم}
ای کاش که یک تنه قضاوت نکنیم
ما بین طناب و تیر، عادت نکنیم
ای کاش صدای زندگانی باشیم
بر پنبه به شعله‌ها وساطت نکنیم

پدر :
گفتند کرونا صدمه خواهد زد
برپیروجوان سربسر خواهد زد
خوشالم اگر این ویروس ناهنگام
برشعرادب چنگ زدو خواهد زد

 

این عمه که هست خواهر پنج داداش
طبعش شده آتشین چو هفتیر و کلاش
اما چو محبت است شلیک هاش
قلب همگان مملو عشق است براش

دسته‌ها
علمی کارافرینی محمد حسین ابراهیم زاده

هدف

هدف اون چیزی نیست که حتی شب‌ها هم خوابش رو می‌بینی، هدف چیزیه، که شب‌ها نمی‌ذاره بخوابی.

 

A target is not what you dream about, It’s something that doesn’t let you sleep.

دسته‌ها
process mining علمی

process mining introduction 3 – decision tree

a good article here
Entropy: the degree of uncertainty
invest of compressibility (zippability)
Goal: reduce entropy in leaves of the tree to improve predictability.
E = – (Sigma from i=1 to k)Pi log(Pi) in base 2
K: possible values enumerated
Pi = Ci / n is the fraction of elements having value i with Ci>= ۱ the number of i value and n= (sigma i = 1 to k ) Ci
decision tree

دسته‌ها
ERP SAP علمی

SAP, Time to market

 

Time to market includes :

  • new product development and introduction
  • Life cycle data management

they all have 4 functions:

  • Analyze, Plan & development
  • procure and manufacture
  • market
  • sell

as you can see, this processes do not include after-sales services.

 

To develop innovative products is probably the most important process for the Consumer Durables industry, but also one of the least well understood. Important because, innovative products are responsible for the revenues and margins that a Consumer Durables company can achieve and its ultimate value. Least well understood because few companies assign a single individual to be responsible for the whole process. Instead, it is usually driven through a series of functional “silos” causing delays to build up and, often, the original market requirements to get lost. The time to transform an idea into a new product and launch it is too long and filled with costly delays. The average time-to-market in the CP industry is about 28 months, the best in peer needs 17 months (AMR Benchmark Analytics 2003).  But, driven by consumer demand and fuelled by advances in technology, Consumer Durables companies have to bring more and more products to market in order to remain competitive. The companies best able to develop and launch innovative products will clearly have an advantage. This is mostly reducing time to market. Under these circumstances, Consumer Durables companies are eager to streamline their development processes.

SAP can provide all of the critical elements required to support shortened time-to-market processes

دسته‌ها
ERP SAP علمی

SAP Consumer Products – Consumer Durables & Home Appliances

SAP consumer products

When we talk about process, This is what we mean. I tried to bold the SD (Sales and destribution) parts.

I’ll post about “Time to market” and “Go to market” processes.

Sales execution is selling from stock. you have an inventory or warehouse of products and you just sell from there. No design ideas, no comments on products. just selling them.

Demand fulfillment and execution includes 2 processes: Back to Back selling (B2B) and Drop shipment. the different is that in B2B, our inventory woude be ncluded. It means we sheep the products in our inventory, then selling them to the customer. Not ship from supplier to the customer.

Post sales support also has 2 processes: service contract and selling services. both needs technical workforces.

دسته‌ها
Data Science آمار علمی

رابطه علّی

در تصمیم‌گیری‌های کسب‌وکار بسیار اهمیت دارد که مدیران بتوانند رابطه علّی را درست تشخیص دهند. می‌توان گفت در بیشتر موارد مدیریت یعنی ایجاد تغییر در چیزهایی که تحت کنترل است به‌منظور آن‌که روی چیزهای دیگری که تحت کنترل نیست، اثر گذاشت تا به نتیجه دلخواه رسید. برای مثال یک مدیر بودجه تبلیغات سازمان خود را افزایش می‌دهد (آنچه تحت کنترل است) به امید آنکه فروش بیشتری ایجاد کند (نتیجه دلخواه). یا دستمزد سال آتی کارمند خود را افزایش می‌دهد (آنچه تحت کنترل است) تا انگیزه او را برای کار کردن بیشتر کند (نتیجه دلخواه). پس نکته مهم آن می‌شود که یک مدیر بتواند علت پدیده‌ها را درست تشخیص دهد.

اما در دنیای واقعی همیشه مسائل آن‌طور که می‌نماید، نیست. در مقاله “چرا مدیران باید تفاوت بین همبستگی و رابطه علّی را بدانند؟” با ارائه مثال‌های متنوعی از دنیای واقعی توضیح دادم چگونه ممکن است دلایل بروز یک پدیده اشتباه تشخیص داده شود. من در این مقاله فرض می‌کنم، خواننده مقاله مذکور را مطالعه کرده است و به این موضوع می‌پردازم که بر چه اساسی وجود رابطه علّی را می‌توان تشخیص داد.

مدیران برای آنکه بتوانند رابطه علّی را بین پدیده‌ها به‌درستی تشخیص دهند باید به سه معیار زیر توجه کنند:

وجود رابطه (Association)،

ترتیب رخداد وقایع (Time Order)، و

نبود رابطه جعلی (Non-Spuriousness).

وجود رابطه

در گام اول باید نشان داد بین دو متغیر رابطه‌ای وجود دارد. اگر افزایش یک متغیر با افزایش و یا کاهش دیگری همراه است، می‌توان گفت بین این دو متغیر رابطه وجود دارد. برای مثال در بسیاری از موارد دیده می‌شود هر چه افراد تجربه کاری بیشتری در صنعت داشته باشند، دستمزد سالیانه بیشتری دریافت می‌کنند (البته این اثر ممکن است از یک‌میزان تجربه کاری بیشتر، کمرنگ شود). پس باید دید آیا داده‌ها وجود چنین حدسی را تائید می‌کنند یا خیر. برای نمونه من رابطه بین سابقه کار و حقوق سالیانه را برای شاغلین حوزه حسابداری، حسابرسی و مدیریت مالی از گزارش حقوق و دستمزد سال ۱۳۹۵ ایران تلنت (Iran Talent) استخراج کردم و در شکل-۱ نشان دادم. نمودار نشان می‌دهد برای این گروه از شاغلین هرچه تجربه کاری افزایش یابد، میانگین دستمزد سالیانه بیشتر می‌شود.

در این نمودار تجربه کاری به شکل یک متغیر رسته‌ای (Categorical) و میزان حقوق و دستمزد به شکل عددی (Numerical) اندازه‌گیری شده است. این یعنی میزان تجربه کاری در چند دسته تقسیم شده، درحالی‌که میزان دستمزد (بر حسب میلیون تومان) می‌تواند هر عددی را به شکل پیوسته به خود بگیرد.

شکل-۱

زمانی که هر دو متغیر عددی هستند، شدت رابطه خطی را می‌توان به‌صورت کمّی با ضریب همبستگی (Correlation Coefficient) سنجید. ضریب همبستگی همواره عددی بین ۱ و ۱- است.  این ضریب دو بخش دارد: مقدار عددی و علامت. مقدار عددی نشان می‌دهد چقدر رابطه خطی بین دو متغیر قدرتمند است. علامت نشان می‌دهد جهت این رابطه مثبت است یا منفی.

اگر ضریب همبستگی مثبت باشد، به این مفهوم است که افزایش در مقادیر یک متغیر با افزایش در مقادیر متغیر دیگر همراه است. همین‌طور کاهش در مقادیر یک متغیر با کاهش در مقادیر متغیر دیگر همراه است. در این حالت اگر نمودار پراکندگی دو متغیر رسم شود، می‌توان خطی با شیب مثبت را از بین نقاط برازش داد (شکل-۲). به همین ترتیب اگر ضریب همبستگی منفی باشد، می‌توان خطی با شیب منفی را از بین نقاط برازش داد (شکل-۲).

هرچه مقدار مطلق ضریب همبستگی (صرف‌نظر از علامت) به ۱ نزدیک باشد، نشان می‌دهد شدت رابطه خطی بین دو متغیر قوی‌تر است. در مقابل ضریب همبستگی نزدیک صفر نشان می‌دهد که رابطه خطی بسیار ضعیفی بین دو متغیر برقرار است.

شکل-۲

اگر بین دو متغیر رابطه غیرخطی برقرار باشد، همچنان این امکان وجود دارد ضریب همبستگی نزدیک صفر باشد که نشان‌دهنده نبود رابطه خطی بین دو آن است (شکل-۳). به همین دلیل در هنگام تحلیل بهتر است نمودار پراکندگی بین متغیرها رسم شود تا به وجود این روابط پی برد.

شکل-۳

برای آنکه از وجود رابطه بین دو متغیر مطمئن شویم، تنها به میزان شدت و ضعف رابطه (انداز ضریب همبستگی) نباید اطمینان کرد بلکه باید به سطح معنی‌داری آماری نیز توجه کرد. بحث بیشتر در این مورد را می‌توانید در مقاله “ضریب همبستگی چیست و چه کاربردی دارد؟” دنبال کنید.

در حالتی که هر دو متغیر به شکل رسته‌ای اندازه‌گیری شده‌اند، معمولاً داده‌ها را در جدول متقاطع (Cross Tabulation) نشان می‌دهیم. شکل-۴ نتایج یک نظرسنجی را در قالب جدول متقاطع نشان می‌دهد. در این مثال شرکتی برای ارائه خدمات پشتیبانی مشتریان علاوه بر روش فعلی (تماس تلفنی)، پلتفرم آنلاین جدیدی را عرضه کرده است. شرکت تمایل دارد ببینید آیا بین استفاده از این دو روش و رضایت کلی مشتریان از دریافت خدمات پشتیبانی رابطه‌ای وجود دارد یا خیر. در این مثال هر دو متغیر رسته‌ای هستند؛ روش دریافت خدمت دارای دو حالت (تماس تلفنی یا پلتفرم آنلاین) و رضایت کلی مشتری دارای سه حالت (راضی، متوسط، ناراضی) است.

برای نمونه جدول نشان می‌دهد از ۱۲۱۸ نفری که در این نظرسنجی خدمات پشتیبانی را از طریق تماس تلفنی دریافت کردند، ۳۷۳ نفر معادل ۳۱ درصد از دریافت خدمت راضی بودند. همچنین می‌توان گفت از بین ۸۹۱ نفری که در این نظرسنجی بیان کردند از دریافت خدمات پشتیبانی راضی هستند، ۳۷۳ نفر معادل ۴۲ درصد خدمات پشتیبانی را از طریق تماس تلفنی دریافت کردند.

شکل-۴

یک روش مرسوم برای تحلیل جدول متقاطع، روش تحلیل کای-دو (Chi-Square Analysis) است. هدف آن است که بفهمیم آیا می‌توانیم بگوییم استفاده از دو روش متفاوت دریافت خدمت به لحاظ آماری اثر معنی‌داری روی سطح رضایت مشتریان گذاشته است. تحلیل آماری برای این مثال نشان می‌دهد برای سطح معنی‌داری ۰٫۰۵ نمی‌توان چنین نتیجه‌ای گرفت. بنابراین نمی‌توان گفت رابطه‌ای بین روش دریافت خدمت و رضایت کلی مشتری از دریافت خدمت وجود دارد.

ترتیب رخداد وقایع

زمانی که از وجود رابطه مطمئن شدیم، توجه خود را به ترتیب زمانی متغیرهای موردنظر جلب می‌کنیم. اگر متغیر عامل یا مستقل (Independent Variable) بخواهد علت متغیر وابسته (Dependent Variable) باشد، منطقاً باید قبل از آن رخ دهد. به‌عبارت‌دیگر، دلیل قبل از معلول باید رخ دهد. در حالت ایدئال از طریق آزمایش کنترل‌شده تصادفی (Randomized Controlled Experiment) می‌توان به این موضوع پی برد. در آزمایش کنترل‌شده تصادفی سعی می‌کنیم به‌دقت متغیرهای عامل را کنترل کنیم و سپس اثر آنان را روی خروجی موردنظر بسنجیم. به این شکل می‌توان ترتیب رخداد وقایع را تنظیم کرد.

شاید خواننده استدلال کند در دنیای واقعی کسب‌وکار به‌سختی می‌توان اثر متغیرها را کنترل کرد. من با چنین استدلالی همدلی دارم. ولی بدترین حالت این است که ما خودمان شرایط را به‌گونه‌ای ایجاد کنیم که تداخل متغیرها اجازه اندازه‌گیری اثر آنان را ندهد. برای مثال در حوزه بازاریابی و ترویج من بارها دیدم که شرکت‌ها هم‌زمان چندین اقدام را انجام می‌دهند. وقتی شرکتی در یک‌زمان کوپن تخفیف در سطح گسترده به مشتریانش می‌دهد، حمل رایگان محصول را به‌عنوان یک امتیاز پیشنهاد می‌دهد و یک کمپین تبلیغاتی در قالب مسابقه برگزار می‌کند، نمی‌تواند اثرات مجزای این فعالیت‌ها را بر میزان فروش اندازه‌گیری کند. به‌این‌ترتیب شرکت نمی‌فهمد سرمایه‌گذاری روی هر یک از این روش‌ها چقدر برایش عایدی ایجاد می‌کند. شاید درنهایت شرکت از همه این روش‌ها استفاده کند ولی حداقل برای دوره آزمایشی باید تا جای ممکن اثر بقیه رخدادها را کنترل کند.

ممکن است همواره مدیران این امکان را نداشته باشند که از طریق آزمایش کردن در کسب‌وکار به ترتیب رخداد وقایع پی ببرند. در این حالت تکیه‌بر منطق، استفاده از تجارب دیگران یا نتایج تحقیقات انجام‌شده می‌تواند به آنان در این امر کمک کند. پیام اصلی این است که یک مدیر هوشمند همواره در مورد جهت رابطه علی تأمل می‌کند و به‌سرعت نتیجه‌گیری نمی‌کند؛ آیا مطمئن هستیم الف موجب ب شده یا شاید ب عامل الف شده و یا شاید متغیر سومی هر دو را هدایت می‌کند. در این مورد در مقاله “چرا مدیران باید تفاوت بین همبستگی و رابطه علّی را بدانند؟” همراه با مثال‌هایی بحث کرده‌ام.

نبود رابطه جعلی

این امکان هست که دو متغیر هم‌زمان باهم ارتباط داشته باشند، یکی قبل از دیگری رخ دهد ولی هیچ رابطه علّی بین آن دو وجود نداشته باشد. یک نمونه از وجود رابطه جعلی، رابطه بین سایز کفش کودکان و میزان دانش آنان است؛ هرچه سایز کفش کودک بزرگ‌تر باشد دانش بیشتری دارند. واضح است که سایز کفش عامل افزایش دانش در کودکان نیست. هر دو متغیر تحت تأثیر سن کودک قرار دارند. مثال دیگر تعداد آتش‌نشانانی است که در مهار آتش‌سوزی شرکت می‌کنند و میزان خسارت ناشی از آتش‌سوزی است. در اینجا دوباره متغیر سومی یعنی حجم آتش‌سوزی است که بر روی هر دو متغیر اثر می‌گذارد.

در برخی موارد هم روابط جعلی کاملاً تصادفی هستند و هیچ ارتباطی به متغیر سوم ندارند. برای مثال بین تعداد پرتاب فضاپیماهای غیرتجاری در دنیا و تعداد فارغ‌التحصیلان دکترای رشته علوم اجتماعی در آمریکا در هر سال همبستگی قوی (ضریب همبستگی ۰٫۷۹) وجود دارد (شکل-۵).

شکل-۵

این‌ها مواردی از روابط جعلی بین متغیرها هستند. این مثال‌ها خیلی سرراست‌اند. ولی در مسائل عملی ممکن است تشخیص آن به همین راحتی نباشد. به‌خصوص حالتی که متغیر سومی ممکن است عامل پیش برنده هر دو متغیر باشد. برای مواجهه با این مسئله، طراحی دقیق آزمایش تجربی، جمع‌آوری دقیق داده، استفاده از روش‌های کنترل آماری و بهره‌گیری از چندین منبع داده‌ای برای تائید نتایج می‌تواند مفید باشد.

منابع:

Cook, T. D., Campbell, D. T., & Shadish, W. (2002). “Experimental and Quasi-Experimental Designs for Generalized Causal Inference”, Boston: Houghton Mifflin

Pearl, J., Glymour, M., Jewell, N. P. (2016). “Causal Inference in Statistics”, Wiley & Sons Ltd

Smith, G. (2014). “Standard Deviations: Flawed Assumptions, Tortured Data, and Other Ways to Lie with Statistics”, Overlook Duckworth, Peter Mayer Publishers, Inc. New York

Vigen, T. (2015). “Spurious Correlations”, Hachette Books