همه آنچه که برای تعریف و تنظیم بعد زمان در 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 اهیمت زیادی دارد. در این مجموعه پست به دنبال به اشتراک گذاری و همین طور آرشیو کوئری های پرکاربرد هستم. بدیهی است که همه این کوئری ها رو خودم ننوشتم و خیلی از آنها نتیجه جستجوست. هر جا که یادم باشه لینک مرجع را هم خواهم کذاشت.
لیست کوئری هایی که در 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/
فرض کنیم مجموعه بزرگی از متون در اختیار داریم و می خواهیم بدانیم این متون درباره چه موضوعاتی هستند؟ در این حالت الگوریتم های مدلسازی موضوعی ( topic modeling) به کارمان می آیند. مدلسازی موضوعی به دنبال این است که مجموعه از موضوعات را که اسناد یک مجموعه درباره آنها هستند را پیدا کند. ما در این پست از الگوریتم LDA که مخفف عبارت Latent Dirichlet Allocation است برای مدلسازی موضوعی استفاده خواهیم کرد. اگر می خواهید در رابطه با مدلسازی موضوعی بیشتر بدانید این پست را بخوانید که به زبان فارسی است و روشهای مختلف مدلسازی موضوعی را بررسی کرده است و نقطه شروع خوبی برای شناختن عمیق تر این روشهاست.
در این پست دنبال رسیدن به این اهداف هستیم:
1- پیش زمینه ای از مدلسازی موضوعی خواهیم گفت
2- از الگوریتم LDA استفاده خواهیم کرد. این الگوریتم ریاضیات پیچیده ای دارد که ما واردش نمی شویم اما به صورت خیلی شهودی توضیح میدهیم که این الگوریتم چطور کار می کند.
3- از کتابخانه topicmodelig در R استفاده خواهیم کرد.
4- قدم به قدم جزییات را شرح میدهیم و به منابع دیگری لینک میدهیم، بخصوص درباره مباحثی که جای شرح بیشتر آنها را در این وبلاگ نداریم.
LDA چطور کار می کند؟
در واقع اگر بخواهیم دقیق بدانیم که LDA چطور موضوعات را در یک مجموعه متن شناسایی می کند باید مبنای ریاضیاتی و آماری آن را بررسی کنیم. اما با کنار گذاشتن ریاضیات این مدل هم می توان درکی شهودی از آن بدست آورد.
فرض کنیم مجموعه بزرگی از متن در اختیار داریم. ( بزرگ بودن مجموعه و همین طور کوتاه نبودن متن ها در این روش اهمیت دارد). LDA فرض می کند در این مجموعه متن تعدادی، مثلا 10، موضوع وجود داشته باشد. فرض بعدی این است که هر یک از این موضوعات می تواند سهمی در تشکیل هر یک اسناد موجود در مجموعه متن داشته باشد. یعنی اگر فرض بر این باشد که در مجموع 10 موضوع مختلف داریم. هر یک از اسناد ترکیبی است از تمام این موضوعات ، البته نه با احتمال مساوی! بلکه ممکن است یک یا چند موضوع سهم بیشتری در یک سند داشته باشند.
ولی ما در واقعیت فقط متون و کلمات را می بینیم و نه موضوعات را! موضوعات در واقع در متن ها پنهان هستند و هدف LDA استخراج این موضوعات پنهان با داشتن متن ها و کلمات است. خوب حالا LDA چطور این موضوعات پنهان را پیدا می کند؟
بر اساس جواب به یک سوال در سایت Quora که توسط ادوین چن نوشته شده است، LDA به زبان ساده به این ترتیب کار می کند :
بعد از تکرار مراحل بالا به تعداد زیاد به یک وضعیت نسبتا ثابت خواهیم رسید که در آن موضوع هایی که به هر کلمه نسبت داد هایم دیگر تغییر نمی کنند و مدل بدست آمده مدل موضوعی مجموعه متن خواهد بود.
مدلسازی موضوعی با استفاده از پکیج 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"))
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) |
به عنوان دیتاساینتیست، مهندس یادگیری ماشین یا سایر شغلهایی که با گردآوری، ذخیره و تحلیل داده ها و توسعه الگوریتم ها و مدلهای مبتنی بر داده مرتبط هستند، چقدر به کارکرد درست الگوریتم و مدل تان فکر می کنید؟ مدلی که توسعه می دهید، چقدر از پیش داوری های ذهنی تان تاثیر می گیرد؟ آیا جایی برای دریافت بازخورد و اصلاح عملکرد مدلتان در نظر می گیرید؟ اگر مدل خطا داشته باشد، چه تبعاتی ممکن است برای کاربران آن ایجاد شود؟ بعضی معتقدند که ترکیب کلان داده ها، علم داده و هوش مصنوعی تحول بزرگی در زندگی بشر ایجاد خواهد کرد و نتیجه میگیرند که لازم است هرچه زودتر خودمان را برای این تحول آماده کنیم. ما قبلا هم تحولاتی ازین دست داشته ایم. مثلا اختراع ماشین بخار و انقلاب صنعتی که حتی شکل شهرها و روستاها و درنهایت زندگی افراد را تغییر داد. آن زمان با ذوق زده شدن در برابر مزایای آنی و ملموسِ صنعتی شدن، خیلی چیزها نادیده گرفته شد. مثلا اثر منفی صنعتی شدن بر طبیعت و تخریب آن! خیلی طول کشید تا مضرات صنعتی شدن بر رودخانه ها، جنگلها و آب و هوا مشخص بشود و هنوز هم خیلی از کشورها از جمله کشور خودمان در این رابطه اقدام موثری انجام نداده اند. بسیاری از جمله خانم کتی اونیل نویسنده کتاب سلاح های تخریبی ریاضیاتی، معتقدند که علم داده هم میتواند تاثیرات منفی ای در این ابعاد، برای جامعه داشته باشد. بنابراین باید مراقب آنها باشیم و قوانین تازه ای برای نظارت بر الگوریتمهای مبتنی بر داده وضع کنیم.
اما آسیب های استفاده از الگوریتمها و روشهای هوشمند بر جامعه چه چیزهایی هستند؟ در جواب این سوال ممکن است که امنیت و محرمانگی داده ها به ذهن شما خطور کند، گرچه این یکی از مواردی ست که باید مورد توجه باشد و اخیرا خیلی هم به آن توجه شده اما این چیزی نیست که کتی اونیل از آن بحث می کند. خودش نگرانی اش را در این جمله خلاصه می کند که علم داده، آینده را فقط پیش بینی نمی کند، بلکه آینده را رقم می زند.
کتی اونیل اخیرا مهمان پادکست دیتافریمید بود و ضمن معرفی کتابش از این آسیبها صحبت کرد. بر اساس گفتههای خانم اونیل در حال حاضر در خیلی از تصمیم گیری های اقتصادی و اجتماعی از الگوریتم های تحلیل داده استفاده می شود، مثلا درپرداخت وامهای بانکی، از الگوریتمی استفاده میشود که با توجه به مشخصات فرد و سوابق مالی او تصمیم میگیرد که این فرد با چه احتمالی ممکن است وام را به بانک برگرداند و اگر این احتمال پایین باشد وامی به فرد متقاضی داده نمی شود. یا حتی در آزمونهای استخدامی و بررسی رزومه افراد متقاضی یک شغل هم ازین الگوریتم ها استفاده می شود و یک الگوریتم تصمیم میگیرد آیا فرد متقاضی دارای حداقل ویژگیهای لازم هست یا نه. یا در دادگاه های امریکا یک الگوریتم با محاسبه ریسک ارتکاب مجدد جرم در تصمیمگیری در مورد میزان دوره محکومیت فرد در زندان تاثیر گذار است. یا موردی که همه ما با آن برخورد داشته ایم، نمایش انتخابی آگهی ها در فضای مجازی با توجه به ویژگی ها و رفتار قبلی افراد.
خوب سوالی که ممکن است پیش بیاد این است که همه لین مثالها، نمونه ی خوبی از کاربرد علم داده در زندگی هستند، مشکل کجاست؟ کتی اونیل توضیح می دهد که این الگوریتم ها معمولا بر اساس یک سری پیش داوری(بایاس) عمل میکنند. مثلا در الگوریتمی که در دادگاه های امریکا، میزان ریسک ارتکاب مجدد جرم را برای متهم محاسبه می کند، این ریسک بر اساس یک پرسشنامه محاسبه میشود. پرسشنامهای که با بررسی آن متوجه میشوید که در واقع طراحان پرسشنامه در پی رسیدن به این هستند که شما فقیر هستید یا نه؟ و رنگین پوست هستید یا نه؟ در واقع اگر متهم یک فرد سیاهپوست باشد که در یک محله فقیرنشین زندگی می کند، ریسک ارتکاب مجدد جرم بیشتر خواهد بود و دوره محکومیت او طولانی تر! سوال این است آیا این تصمیمگیری اخلاقی و منصفانه است؟ آیا این نوع تصمیم گیری روی زندگی افراد تاثیر منفی نخواهد داشت؟ و اساسا این نحوه تصمیم گیری چه فرقی با نحوه تصمیمگیری فعلی که آن هم بر اساس پیش داوریهای ذهنی ماست، دارد؟ بجز اینکه این پیش داوری های غلط را آنهم در ابعاد وسیع تقویت میکند؟
مثال دیگری که کتی اونیل می آورد در مورد استفاده از یک الگوریتم هوشمند در تعدیل معلم هاست. این الگوریتم با هدف ارزیابی عملکرد معلم ها توسعه داده شده بود و سعی داشت به تصمیم گیرندگان کمک کند تا معلم هایی که عملکرد ضعیفتری داشتند را تعدیل کند. اما با بررسی هایی که پس از شکایت کسانی که با تصمیم این سیستم کارشان را از دست داده بودند مشخص شد که روش تصمیم گیری این الگوریتم کاملا خطا بوده است و الگوریتم مورد نظر حتی مثل یک روش رندم هم کار نکرده است! آنچه باعث نگرانی بیشتر است این است که در بسیاری از موارد از الگوریتمهای مشابه استفاده می شود بدون اینکه مردم بدانند و بدون اینکه مشخص باشد این الگوریتمها چطور کار می کنند!
یک نکته مهم دیگر در مورد این مدلها این است که این مدلها تفسیرپذیر نیستند و نمیتوانیم دقیقا بگوییم که چرا این پیش بینی ها را کرده اند! از ین لحاظ همه این مدلها یک جعبه سیاه هستند. و وقتی مثلا یک معلم بر اساس تصمیم این مدل از کار بیکار می شود و می پرسد چرا؟ شما دقیقا نمی توانید پاسخی به او بدهید و از آنجایی که این مشکل در ابعاد بالا اتفاق می افتد این الگوریتمها در مجموع ناعادلانه خواهند بود.
بحث پیش داوری ناعادلانه در الگوریتم ها، حقوق افرادی که داده آنها جمع آوری شده و .. ، مباحث جدیدی نیستند و افراد و گروه های زیادی درباره این موضوع اظهارنظر کرده اند و راه حل های متفاوتی پیشنهاد کرده اند. یکی از آنها دکتر دی.جی پاتیل است که اخیر همراه دو نویسنده دیگر کتابی با عنوان اخلاق و علم داده منتشر کرده اند و یک چک لیست برای استفاده در پروژه های مبتنی بر داده ارائه کرده اند. نویسندگان این کتاب استفاده از این چک لیست را روشی ساده و سریع برای اجتناب از اشتباهات و حصول اطمینان از درنظر گرفته شدن تمام جوانب لازم برای ارائه یک محصوب مبتنی بر داده میدانند.
کتی اونیل اما در برخورد با این مشکلات دو راهحل پیشنهاد میدهد: یکی شفافیت و دیگری نظارت. در مورد شفافیت اونیل معتقد است که باید در مورد اینکه چه چیزی شفاف است خوب فکر کنیم. اینکه مثلا سورس کد مدل را به معلم ها بدهیم و بگوییم که این روشی است که شما با آن ارزیابی شده اید. یا این پارامتر یا ضریبی است که در آموزش مدل به آن رسیده ایم، فایده ای نخواهد داشت. اونیل پیشنهاد می دهد که یک نوع تجزیه و تحلیل میزان حساسیت مدل به فاکتورهای مختلف، اینجا داشته باشیم. که اگر بخواهیم ساده توضیحش بدهیم این است که اول باید تایید بشود که الگوریتم یا مدل تهیه شده، داده درستی از افراد دارد، بعد توضیح داده شود که اگر در این داده هر یک از مشخصات افراد کمی تغییر بکند چه اتفاقی می افتد؟ اگر فلان بچه توی کلاس این معلم نبود چه میشد؟ اگر فلان بچه نمره بهتری میگرفت؟ اگر بجای 30 تا شاگرد، 20 نفر شاگرد توی کلاس بود، اگر این معلم در یک مدرسه دیگر تدریس می کرد و ...
این روش همه مشکلات را حل نمی کند اما می تواند جلوی خطاها و لغزش های واضح را بگیرد. اگر شما ببینید که نتیجه الگوریتم با یک تغییر کوچک در داده ها، تغییر فاحشی داشته باشد میتوانید بفهمید که الگوریتم مشکل دارد.
اما منصف بودن یک الگوریتم را به این صورت و با بررسی یک مورد نمی توان بررسی کرد. انصاف یک مفهوم آماری است و ما باید به صورت جامع رفتار الگوریتم را بررسی کنیم. بنابراین ایده نظارت و حسابرسی الگوریتم ها را اینجا مطرح می شود. نظارت با پرسیدن سوالاتی مثل اینکه این الگوریتم برای چه کسانی پاسخگو نیست؟ بیشتر برای سفید پوستان پاسخگو نیست یا رنگین پوستان، مردان یا زنان و ... سر و کار دارد. البته با شفافیت و امکان بررسی فرد به فرد نمیشود به این سوالات جواب داد، بلکه این سوالی است که باید در سطوح بالاتر و با دسترسی بیشتر پرسیده بشود. و نیاز هست که قانون شرکتها را وادار کند که به این نظارت تن بدهند.
در کنار این روشها برخی افراد دیگر مثل کیت استراچنی نویسنده چند کتاب از جمله پیشروان علم داده، پیشنهاد تعریف نقش مدیر ارشد دایره اخلاق را در سازمانها مطرح کرده اند که وظیفه او نظارت بر پیامدهای اخلاقی محصولات داده محور است.