دیتا اینسایتز

در مورد علم داده، داده کاوی، هوشمندی کسب و کار(BI) و سایر مطالب مرتبط

دیتا اینسایتز

در مورد علم داده، داده کاوی، هوشمندی کسب و کار(BI) و سایر مطالب مرتبط

بعد زمان در کیوب

همه آنچه که برای تعریف و تنظیم بعد زمان در SSAS لازم خواهید داشت :

Creating a Date Dimension in an Analysis Services (SSAS) Cube



سوالات مصاحبه داده کاوی

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

پ.ن : این را هم بگم که با جستجوی کلمات data mining interview questions به نتایج خوبی می تونید برسید.




1-      الگووریتم های با ناظر و بدون ناظر چه الگوریتم هایی هستند؟

2-      طبقه بندی/ کلسیفیکیشن چی هست و چند تا از الگوریتم هایی که برای آن به کار می روند را نام ببرید.

3-      کدوم یکی از این الگوریتم ها را تا به حال استفاده کردید و برای حل چه مساله ای؟ اون مساله را شرح بدید تا حد ممکن و بگید چرا این روش را انتخاب کردید؟

4-      خوشه بندی یا کلاسترینگ چی هست و چند تا از الگوریتم هایی که برای آن به کار می روند را نام ببرید.

5-      کدوم یکی از این الگوریتم ها را تا به حال استفاده کردید و برای حل چه مساله ای؟ اون مساله را شرح بدید تا حد ممکن و بگید چرا این روش را انتخاب کردید؟

6-      در یک مساله داده کاوی معمولا چه مراحلی وجود داره؟ وقتی یک داده و یک مساله داریم چه فرآیندی را تا حل آنم مساله باید طی کنیم؟ )  باید به چیزهایی مثل انتخاب داده، پاکسازی و نرمالسازی، کاهش ابعاد، انتخاب ویژگی ها، مدلسازی ، ارزیابی و ..  اشاره کنه)

7-      برای ارزیابی یک مدل طبقه بندی/ کلسیفیکیشن از چه معیارهایی استفاده میشه؟

8-      برای ارزیابی یک کلاسترینگ از چه معیارهایی استفاده میشه؟

9-      چه ابزارهای برای داده کاوی تا بحال استفاده کردید؟

10-  به نظرتون چه وقت هایی باید از الگوریتم K Nearest Neighbors Algorithm استفاده کرد؟ چه نقاط قوت و ضعفی دار؟ ( یا الگوریتم های درخت یا SVM یا .. )

لیست کوئری هایی که در sql server در حال اجرا هستند

در همه مشاغلی که با داده ها سر و کار دارند، مهارت به کاربردن SQL  اهیمت زیادی دارد. در این مجموعه پست به دنبال به اشتراک گذاری و همین طور آرشیو کوئری های پرکاربرد هستم. بدیهی است که همه این کوئری ها رو خودم ننوشتم و خیلی از آنها نتیجه جستجوست. هر جا که یادم باشه لینک مرجع را هم خواهم کذاشت.

 

لیست کوئری هایی که در sql server در حال اجرا هستند :

 

SELECT sqltext.TEXT,

req.session_id,

req.status,

req.command,

req.cpu_time,

req.total_elapsed_time

FROM sys.dm_exec_requests req

CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

 

 

و برای متوقف کردن هر یک از این کوئری ها می تونید دستور زیر را اجرا کنید که در آن  session_id  از کوئری بالا میاد.

KILL [session_id]




مراجع مورد استفاده در این پست :

1- https://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql/


مدلسازی موضوعی در R

فرض کنیم مجموعه بزرگی از متون در اختیار داریم و می خواهیم بدانیم این متون درباره چه موضوعاتی هستند؟ در این حالت الگوریتم های مدلسازی موضوعی ( topic modeling) به کارمان می آیند. مدلسازی موضوعی به دنبال این است که مجموعه از موضوعات را که اسناد یک مجموعه درباره آنها هستند را پیدا کند.  ما در این پست از الگوریتم LDA که مخفف عبارت Latent Dirichlet Allocation است برای مدلسازی موضوعی استفاده خواهیم کرد. اگر می خواهید در رابطه با مدلسازی موضوعی بیشتر بدانید این پست را بخوانید که به زبان فارسی است و روشهای مختلف مدلسازی موضوعی را بررسی کرده است و نقطه شروع خوبی برای شناختن عمیق تر این روشهاست.


در این پست دنبال رسیدن به این اهداف هستیم:
1-    پیش زمینه ای از مدلسازی موضوعی خواهیم گفت
2-    از الگوریتم LDA استفاده خواهیم کرد. این الگوریتم ریاضیات پیچیده ای دارد که ما واردش نمی شویم اما به صورت خیلی شهودی توضیح میدهیم که این الگوریتم چطور کار می کند.
3-    از کتابخانه topicmodelig در R  استفاده خواهیم کرد.
4-    قدم به قدم جزییات را شرح میدهیم و به منابع دیگری لینک میدهیم، بخصوص درباره مباحثی که جای شرح بیشتر آنها را در این وبلاگ نداریم.


LDA چطور کار می کند؟

در واقع اگر بخواهیم دقیق بدانیم که LDA چطور موضوعات را در یک مجموعه متن شناسایی می کند باید مبنای ریاضیاتی و آماری آن را بررسی کنیم. اما با کنار گذاشتن ریاضیات این مدل هم می توان درکی شهودی از آن بدست آورد.
فرض کنیم مجموعه بزرگی از متن در اختیار داریم. ( بزرگ بودن مجموعه و همین طور کوتاه نبودن متن ها در این روش اهمیت دارد).  LDA  فرض می کند در این مجموعه متن  تعدادی، مثلا 10، موضوع وجود داشته باشد. فرض بعدی این است که هر یک از این موضوعات می تواند سهمی در تشکیل هر یک اسناد موجود در مجموعه متن داشته باشد. یعنی اگر فرض بر این باشد که در مجموع 10 موضوع مختلف داریم. هر یک از اسناد ترکیبی است از تمام این موضوعات ، البته نه با احتمال مساوی! بلکه ممکن است یک یا چند موضوع سهم بیشتری در یک سند داشته باشند.

ولی ما در واقعیت فقط متون و کلمات را می بینیم و نه موضوعات را!  موضوعات در واقع در متن ها پنهان هستند و هدف LDA استخراج این موضوعات پنهان با داشتن متن ها و کلمات است. خوب حالا LDA چطور این موضوعات  پنهان را پیدا می کند؟

 بر اساس جواب به یک سوال در سایت Quora که توسط  ادوین چن  نوشته شده است، LDA به زبان ساده به این ترتیب کار می کند :


  1.  LDA لازم دارد تعداد موضوعات را از به عنوان ورودی دریافت کند. فرض می کنیم تعداد موضوعات k تا باشد. ( یکی از مشکلات LDA همین است!)
  2.  روی مجموعه متن پیمایش کنید و هر کلمه در هر متن را به صورت تصادفی به یکی ازK  تا موضوع نسبت بدهید.
  3.  این نسبت دادن، همین جا یک توزیع احتمالی از کلمات در موضوع ها و یک توزیع احتمال از موضوع ها در متن ها به ما میدهد. (که البته توزیع های خوب و دقیقی نیستند! )
  4.  بنا براین برای بهبود توزی احتمالهای بدست آمده، برای هر متن مراحل زیر را تکرار کنید:
    • برای هر کلمه w در متن مورد نظر مراحل زیر را تکرار کنید
    • برای هر موضوع دو تا چیز را محاسبه کنید
      • 1- کسری از کلمات درمتن d که به موضوع t نسبت داده شده اند. یعنی p(topic t | document d)   را محاسبه کنید
      • 2- نسبتی از همه متن ها که به موضوع t  نسبت داده شده اند به شرطی که کلمه w را داشته باشند. یعنی p(word w| topic t)   را محاسبه کنید.
    • بعد به w  یک تاپیک جدید نسبت بدید و برای این کار موضوع جدید کلمه w را از میان موضوعات موجود به احتمال p(topic t | document d) * p(word w| topic t) انتخاب کنید.  بر اساس مدل generative  ما این دقیقا احتمال اینه که تاپیک t کلمه w را به وجود آورده باشد. بنابراین منطقی  است که موضوع جدید کلمه رو به این روش محاسبه کنیم.
    • در واقع در این مرحله داریم فرض می کنیم که همه موضوع هایی که بههمه کلمات به جز کلمه w نسبت داده ایم به درست هستند. بنابراین با استفاده از مدلی که از توزیع احتمال مرحله قبل داریم موضوع کلمه w رو محاسبه و بعد به روز رسانی می کنیم

بعد از تکرار مراحل بالا به تعداد زیاد به یک وضعیت نسبتا ثابت خواهیم رسید که در آن موضوع هایی که به هر کلمه نسبت داد هایم دیگر تغییر نمی کنند و مدل بدست آمده مدل موضوعی مجموعه متن خواهد بود. 


مدلسازی موضوعی با استفاده از پکیج topicmodels   در R

در ادامه این پست، با استفاده از پکیج topicmodels   در R، روی یک مجموعه کوچک (بله کوچک، برخلاف آنکه گفتیم مجموعه اسناد باید بزرگ باشد! ) الگوریتم LDA را اجرا می کنیم و مدلسازی موضوعی را انجام می دهیم. الگوریتم LDA در این پکیج تعداد زیادی ورودی دارد که ما اینجا فقط آنهایی را که استفاده کرده ایم توضیح می دهیم. برای بررسی بیشتر به مستندات پکیج topicmodeling مراجعه کنید.


مجموعه متن مورد استفاده ما در این پست که می توانید آن را از  اینجا دریافت کنید شامل 30 متن خبری است که از صفحه اخبار سیاسی خبرگزاری های ایرنا، ایسنا و فارس انتخاب شده اند. برای این کار در روز یکشنبه 8 اردیبهشت 1398،  10 خبر اول ( که در جایگاه های اخبار مهم و نیز سایر اخبار قرار داشتند ) از هریک از این خبرگزاری ها انتخاب شد.
قدم اول بارگزاری کتابخانه "tm" است. ( اگر این کتابخانه را قبلا نصب نکرده اید لازم است قبل از فراخوانی این دستورها، با دستور install.package(“tm”) آنها را نصب کنید)  :


##### load 'tm' package #####
library(tm)


در مرحله بعد فایلهای اخبار را که در یک فولدر به نام data قرار دارند خوانده و در یک dataframe قرار می دهیم.


##### read news files and convert them into a dataframe #####
newsFiles_dir <-"./data"
newsFiles <- list.files(newsFiles_dir , pattern = "*.txt" , full.names = TRUE)

txt_data<- lapply(newsFiles , function( x ) { strs <- read.delim (x , stringsAsFactors = FALSE)
                                                                                                          paste(strs , collapse = ' ')  }  )
data<-  data.frame( doc_id = newsFiles ,  text = as.character( unlist( do.call(rbind , txt_data))))

در مرحله بعدی، مراحل پاکسازی متن را انجام می دهیم. در این مرحله علائم نگارشی و کاراکترهای کنترلی و .. را از متن حذف می کنیم :


##### remove punctuations and control characters #####
data[[2]] <- gsub(" ها" , " " , data[[2]])
data[[2]] <- gsub("'" , " " , data[[2]])
data[[2]] <- gsub("[[:punct:]]" , " " , data[[2]])
data[[2]] <- gsub("[[:cntrl:]]" , " " , data[[2]])
data[[2]] <- gsub("^[[:space:]]+" , "" , data[[2]])
data[[2]] <- gsub("[[:space:]]+$" , "" , data[[2]])


پس از آن  corpus را ایجاد می کنیم و سپس کلمات توقف را حذف می کنیم. corpus  یک شی است که نماینده یک مجموعه متن است. ما با خواندن و تبدیل مجموعه متن به corpus می توانیم از توابعی که پکیج tm برای پردازش متن ارائه کرده استفاده کنیم و در نهایت آن را تبدیل به ماتریس ترم-داکیومنت کنیم. لیستی از کلمات توقف که برای این کار آماده و از آن استفاده شده است را از اینجا می توانید دریافت کنید.


##### create corpus object #####

docs <- Corpus (VectorSource(data[[2]]) ,  readerControl = list(language="fa_FAE",encoding = "UTF-8"))


##### remove stop words #####

persianStopwords_file_loc  = "./files/stopwords.txt"

persianStopwords<- readLines(persianStopwords_file_loc )

 

docs <- tm_map(docs , removeWords , persianStopwords)

ماتریس ترم-داکیومنت در واقع یک ماتریس است که به تعداد متن های مجموعه ما سطر و به تعداد کلمات آن ستون دارد. نوع بازنمایی عددی مجموعه متن که آن را آماده می کند تا به عنوان ورودی به LDA داده شود. دستورات زیر corpus بدست آمده در مرحله قبل را به ماتریس ترم- داکیومنت تبدیل می کنند.


##### create doctment-term matrix #####
dm <- DocumentTermMatrix(docs,control = list (encoding = 'UTF-8'))
rownames(dm) <- data[[1]]

##### remove empty documents , if any #####
rowTotals <- apply(dm , 1 , sum)
dtm <- dm [rowTotals>0 , ]


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


علاوه بر این ماتریس ترم داکیومنت پارامتر دیگری که به تابع LDA باید بدهید k، تعداد موضوع ها و method است. پارامتر method روشی است که LDA برای بهینه سازی مدل از آن استفاده می کند. طبق مستندات پکیج topicmodels پارامتر method می تواند دو مقدار متفاوت داشته باشد "VEM" و "Gibbs" که مقدار پیش فرض آن "VEM". این پست وبلاگ eight2late که من از آن استفاده زیادی در این پست کرده ام از روش "Gibbs" استفاده کرده است. و من هم به تبعیت از آن از این روش استفاده می کنم. سایر پارامترهایی که اینجا به LDA داده ایم در واقع پارامترهای مورد نیاز روش "Gibbs" هستند که در همان پست شرح داده شده اند و من از آوردن آنها در اینجا خودداری می کنم.

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


##### load topicmodels library #####
library(topicmodels)

#model paramaters
burnin = 1000
iter = 1000
keep = 50
k = 10


##### train topic models #####
model <- LDA(dtm , k=k , method = "Gibbs" , control = list(burnin = burnin , iter = iter , keep = keep))


خروجی تابع LDA یک شی است با کلی اطلاعات از نتیجه اجرای این الگوریتم. یکی از این نتایج موضوع اختصاص داده شده به هر یک از متن هاست. در قطعه کد زیر، ما این موضوع ها با فراخوانی تابع topics به دست آورده و بعد نتایج را نمایش داده ایم.


##### topics assigned to each document #####
model.topics <- as.matrix(topics(model))
model.topics

نتیجه به دست آمده برای این بخش به صورت زیر است :


topic id doc name
1./data/fars10.txt   
7./data/fars1.txt    
2./data/fars2.txt    
6./data/fars3.txt    
9./data/fars4.txt    
3./data/fars5.txt    
7./data/fars6.txt    
8./data/fars7.txt    
8./data/fars8.txt    
8./data/fars9.txt    
4./data/irna10.txt   
2./data/irna1.txt    
4./data/irna2.txt    
5./data/irna3.txt    
10./data/irna4.txt   
10./data/irna5.txt   
3./data/irna6.txt    
1./data/irna7.txt    
9./data/irna8.txt    
2./data/irna9.txt    
5./data/isna3.txt    
9./data/isna8.txt    

با فراخوانی تکه کد زیر می توانیم ببینیم در هر یک از موضوعات چه تعداد از متن ها اختصاص داده شده است.
##### how many documents in each topic #####
table(model.topics)

که نتیجه آن :


علاوه بر موضوع اختصاص داده شده به هر متن می توانیم کلمات هر موضوع را بر حسب میزان اهمیت آن کلمه در موضوع ببینیم:


##### print top 5 important words in each topic #####
print(terms(model , 5))

که نتیجه آن یه این صورت است :

و در نهایت ابر کلمات، متن های دو موضوع متفاوت را با هم مقایسه کنیم. برای اینکار ابتدا تابع plotWordCloud را  نوشته ایم که با گرفتن اندیس هر موضوع ابر کلمات آن را رسم می کند و پس از آن این تابع را برای 2 موضوع متفاوت فراخوانی کرده ایم که نتیجه را مشاهده می کنید.


##### function to plot wordcloud for a given topic #####
plotWordCloud<- function(t) {
  m<- as.matrix(dtm[rownames(model.topics)[which(model.topics==t)], ])
  require(wordcloud)
  v<- sort(colSums(m) , decreasing = TRUE)
  words<- names(v)
  d<- data.frame(words= words , frq=v)
  dark2<- brewer.pal(6,"Dark2")
  wordcloud(d$words , d$frq , min.freq = 2 , colors = dark2) 
}

##### plot wordcloud of two topics and compare them! #####
par(mfrow=c(1,2))
plotWordCloud(1)
plotWordCloud(8)


منابع :
در نوشتن این پست از این پست وبلاگ eight2late خیلی استفاده کرده ام. 
کدها، داده ها و سایر منابع استفاده شده در این پست را می توانید از اینجا بگیرید.
اگر منبع یا پست دیگری که به این بحث مربوط باشد خواندم لینک آن را به اینجا اضافه خواهم کرد.

علم داده، جامعه و اخلاق!

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

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

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

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

مثال دیگری که کتی اونیل می آورد در مورد استفاده از یک الگوریتم هوشمند در تعدیل معلم هاست. این الگوریتم با هدف ارزیابی عملکرد معلم ها توسعه داده شده بود و سعی داشت به تصمیم گیرندگان کمک کند تا معلم هایی که عملکرد ضعیفتری داشتند را تعدیل کند. اما با بررسی هایی که پس از شکایت کسانی که با تصمیم این سیستم کارشان را از دست داده بودند مشخص شد که روش تصمیم گیری این الگوریتم کاملا خطا بوده است و الگوریتم مورد نظر حتی مثل یک روش رندم هم کار نکرده است! آنچه باعث نگرانی بیشتر است این است که در بسیاری از موارد از الگوریتمهای مشابه استفاده می شود بدون اینکه مردم بدانند و بدون اینکه مشخص باشد این الگوریتم­ها چطور کار می کنند!

یک نکته مهم دیگر در مورد این مدلها این است که این مدلها تفسیرپذیر نیستند و نمی­توانیم دقیقا بگوییم که چرا این پیش­ بینی­ ها را کرده اند! از ین لحاظ همه این مدلها یک جعبه سیاه هستند. و وقتی مثلا یک معلم بر اساس تصمیم این مدل از کار بیکار می شود و می پرسد چرا؟ شما دقیقا نمی توانید پاسخی به او بدهید و از آنجایی که این مشکل در ابعاد بالا اتفاق می افتد این الگوریتمها در مجموع ناعادلانه خواهند بود.

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

کتی اونیل اما در برخورد با این مشکلات دو راه­حل پیشنهاد میدهد: یکی شفافیت و دیگری نظارت. در مورد شفافیت اونیل معتقد است که باید در مورد اینکه چه چیزی شفاف است خوب فکر کنیم. اینکه مثلا سورس کد مدل را به معلم ها بدهیم و بگوییم که این روشی است که شما با آن ارزیابی شده ­اید. یا این پارامتر یا ضریبی است که در آموزش مدل به آن رسیده­ ایم، فایده­ ای نخواهد داشت. اونیل پیشنهاد می­ دهد که یک نوع تجزیه و تحلیل میزان حساسیت مدل به فاکتورهای مختلف، اینجا داشته باشیم.  که اگر بخواهیم ساده توضیحش بدهیم این است که اول باید تایید بشود که الگوریتم یا مدل تهیه شده، داده درستی از افراد دارد، بعد توضیح داده شود که اگر در این داده هر یک از مشخصات افراد  کمی تغییر بکند چه اتفاقی می­ افتد؟ اگر فلان بچه توی کلاس این معلم نبود چه می­شد؟ اگر فلان بچه نمره بهتری می­گرفت؟ اگر بجای 30 تا شاگرد، 20  نفر شاگرد توی کلاس بود، اگر این معلم در یک مدرسه دیگر تدریس می کرد  و ...

 این روش همه مشکلات را حل نمی کند اما می تواند جلوی خطاها و لغزش های واضح را بگیرد. اگر شما ببینید که نتیجه الگوریتم با یک تغییر کوچک در داده ­ها، تغییر فاحشی داشته باشد می­توانید بفهمید که الگوریتم مشکل دارد.

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

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