Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Sparsh Jauhari
Bias in Bio Lab CSSH
Commits
0399f688
Commit
0399f688
authored
Jul 12, 2021
by
Nishtha Jain
Browse files
ipnb cleaned
parent
65a259ba
Changes
2
Hide whitespace changes
Inline
Side-by-side
bios_bias.ipynb
View file @
0399f688
%% Cell type:markdown id: tags:
# pip installations
%% Cell type:code id: tags:
```
python
#!pip install pymongo
#!pip install dnspython==2.0.0
!
pip
install
gensim
```
%% Cell type:markdown id: tags:
## Config
%% Cell type:code id: tags:
```
python
CLASSES
=
[
'physician'
,
'nurse'
,
'psychologist'
,
'dentist'
,
'surgeon'
,
'dietitian'
,
'chiropractor'
]
```
%% Cell type:markdown id: tags:
## BIOS.pkl pickle insight
%% Cell type:code id: tags:
```
python
import
pickle
with
open
(
"datasets/BIOS.pkl"
,
"rb"
)
as
file
:
data
=
pickle
.
load
(
file
)
# title = set()
# raw_title = set()
# gender = set()
# for x in data:
# title.add(x['title'])
# raw_title.add(x['raw_title'])
# gender.add(x['gender'])
print
(
"number data points: "
,
len
(
data
))
print
(
"structure of a data point [0] :
\n
"
,
data
[
0
])
print
(
"types of gender:"
,
gender
)
print
(
"types of title:"
,
len
(
title
))
print
(
title
)
print
(
"types of raw_title:"
,
len
(
raw_title
))
print
(
raw_title
)
```
%% Cell type:markdown id: tags:
## Mongo Connection using pymongo
%% Cell type:code id: tags:
```
python
import
pymongo
client
=
pymongo
.
MongoClient
(
"mongodb+srv://root:Deployment123@clusterbiobias.4mc8e.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
)
collection
=
client
[
'biodb'
][
'allbio'
]
```
%% Cell type:code id: tags:
```
python
print
(
len
(
collection
.
distinct
(
"title"
)))
print
(
collection
.
distinct
(
"title"
))
```
%% Cell type:code id: tags:
```
python
from
pandas
import
DataFrame
```
%% Cell type:code id: tags:
```
python
df
=
DataFrame
(
collection
.
find
({
'$or'
:[{
'title'
:
'teacher'
},{
'title'
:
'professor'
}]}))
print
(
"Teacher male"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'teacher'
)
&
(
df
[
'gender'
]
==
'M'
)]))
print
(
"Professor male"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'professor'
)
&
(
df
[
'gender'
]
==
'M'
)]))
print
(
"Teacher female"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'teacher'
)
&
(
df
[
'gender'
]
==
'F'
)]))
print
(
"Professor female"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'professor'
)
&
(
df
[
'gender'
]
==
'F'
)]))
```
%% Cell type:code id: tags:
```
python
df
=
DataFrame
(
collection
.
find
({
'$or'
:[{
'title'
:
'surgeon'
},{
'title'
:
'nurse'
}]}))
print
(
"surgeon male"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'surgeon'
)
&
(
df
[
'gender'
]
==
'M'
)]))
print
(
"nurse male"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'nurse'
)
&
(
df
[
'gender'
]
==
'M'
)]))
print
(
"surgeon female"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'surgeon'
)
&
(
df
[
'gender'
]
==
'F'
)]))
print
(
"nurse female"
,
len
(
df
.
loc
[(
df
[
'title'
]
==
'nurse'
)
&
(
df
[
'gender'
]
==
'F'
)]))
```
%% Cell type:code id: tags:
```
python
df
=
DataFrame
(
collection
.
find
({
'$or'
:[{
'title'
:
title
}
for
title
in
CLASSES
]}))
df
```
%%%% Output: execute_result
_id \
0 607b0639c53ee5775fe7758b
1 607b0639c53ee5775fe77590
2 607b0639c53ee5775fe7759b
3 607b063ac53ee5775fe775b0
4 607b063ac53ee5775fe775b3
... ...
112458 607b1d5dc53ee5775fed7952
112459 607b1d5dc53ee5775fed795a
112460 607b1d5dc53ee5775fed795b
112461 607b1d5dc53ee5775fed7964
112462 607b1d5dc53ee5775fed7967
path \
0 crawl-data/CC-MAIN-2016-44/segments/1476988720...
1 crawl-data/CC-MAIN-2014-41/segments/1410657132...
2 crawl-data/CC-MAIN-2013-20/segments/1368702127...
3 crawl-data/CC-MAIN-2014-41/segments/1410657120...
4 crawl-data/CC-MAIN-2013-20/segments/1368696381...
... ...
112458 crawl-data/CC-MAIN-2018-43/segments/1539583519...
112459 crawl-data/CC-MAIN-2018-43/segments/1539583519...
112460 crawl-data/CC-MAIN-2018-43/segments/1539583519...
112461 crawl-data/CC-MAIN-2018-43/segments/1539583519...
112462 crawl-data/CC-MAIN-2018-43/segments/1539583519...
raw \
0 Edmund J. Bourne, PhD, is a psychologist in no...
1 Abigail Mackey is a registered nurse. For more...
2 Dr. Constance Milbrath is a developmental psyc...
3 Dr. Andrew Gottlieb is a clinical psychologist...
4 Milton Wolf is a physician practicing in Kansa...
... ...
112458 Adrienne Lewis Adrienne is a registered nurse ...
112459 Eric Haralson, PA-C is a physician assistant i...
112460 Alice Sumo is a respected nurse in Liberia, wh...
112461 Rachel Kelley Schulman, MS, PA-C is a board-ce...
112462 Victor N. Hakim, MD is a practicing Orthopedic...
name raw_title gender start_pos \
0 [Edmund, J, Bourne] psychologist M 136
1 [Abigail, , Mackey] nurse F 37
2 [Constance, , Milbrath] psychologist F 305
3 [Andrew, , Gottlieb] psychologist M 72
4 [Milton, , Wolf] physician M 107
... ... ... ... ...
112458 [Adrienne, Lewis, Adrienne] nurse F 118
112459 [Eric, , Haralson] physician M 98
112460 [Alice, , Sumo] nurse F 98
112461 [Rachel, Kelley, Schulman] physician F 74
112462 [Victor, N, Hakim] Orthopedic Surgeon M 72
title URI \
0 psychologist http://www.alibris.co.uk/search/books/author/E...
1 nurse http://observer-reporter.com/article/20130315/...
2 psychologist http://earlylearning.ubc.ca/people/
3 psychologist http://www.psychologylounge.com/tag/sexuality-2/
4 physician http://hotair.com/archives/2011/12/13/romney-i...
... ... ...
112458 nurse https://www.adansw.com.au/CPD/Courses/Geriatri...
112459 physician https://www.healthgrades.com/providers/eric-ha...
112460 nurse http://woman.ng/2018/10/women-love-midwife-ali...
112461 physician https://lincolnparkaesthetics.com/ourstaff/
112462 surgeon https://www.sharecare.com/doctor/dr-victor-n-h...
bio
0 _ is author of several books, including the be...
1 For more quips and tips, refer to _ blog, “The...
2 _ interests at HELP are in the ethno-cultural ...
3 _ practice serves the greater Silicon Valley a...
4 During the health care debates of 2010, Dr. _ ...
... ...
112458 _ has been successful in gaining two nationall...
112459 _ graduated from Touro Center / College Of Ost...
112460 In _ three-decade career, _ has seen two civil...
112461 _ has a Master of Science degree in Physician ...
112462 _ completed a residency at Henry Ford Hospital...
[112463 rows x 10 columns]
%% Cell type:markdown id: tags:
## TPR Graph mid ppt
%% Cell type:code id: tags:
```
python
classes
=
[
'physician'
,
'nurse'
,
'psychologist'
,
'dentist'
,
'surgeon'
,
'dietitian'
,
'chiropractor'
]
tpr_males
=
[
0.864
,
0.8128654970760234
,
0.8922631959508315
,
0.949435180204411
,
0.6972111553784861
,
0.6851851851851852
,
0.701058201058201
]
tpr_females
=
[
0.9056320400500626
,
0.8622613803230543
,
0.8844028899277518
,
0.9446064139941691
,
0.6285714285714286
,
0.8905608755129959
,
0.6625
]
count_males
=
[
4125
,
342
,
1383
,
1859
,
2259
,
54
,
378
]
count_females
=
[
3995
,
3405
,
2353
,
1029
,
420
,
731
,
160
]
```
%% Cell type:code id: tags:
```
python
import
matplotlib.pyplot
as
plt
x
=
[
count_males
[
i
]
/
(
count_males
[
i
]
+
count_females
[
i
])
for
i
in
range
(
7
)]
y
=
[
tpr_males
[
i
]
-
tpr_females
[
i
]
for
i
in
range
(
7
)]
plt
.
scatter
(
x
,
y
)
plt
.
xlabel
(
"% Male"
)
plt
.
ylabel
(
"TPR Gender Gap Male"
)
for
i
,
txt
in
enumerate
(
classes
):
plt
.
annotate
(
txt
,
(
x
[
i
],
y
[
i
]))
plt
.
show
()
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
x
=
[
count_females
[
i
]
/
(
count_males
[
i
]
+
count_females
[
i
])
for
i
in
range
(
7
)]
y
=
[
tpr_females
[
i
]
-
tpr_males
[
i
]
for
i
in
range
(
7
)]
plt
.
scatter
(
x
,
y
)
plt
.
xlabel
(
"% Female"
)
plt
.
ylabel
(
"TPR Gender Gap Female"
)
for
i
,
txt
in
enumerate
(
classes
):
plt
.
annotate
(
txt
,
(
x
[
i
],
y
[
i
]))
plt
.
show
()
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
# plt.bar([[i,count_males[i]] for i in range(7)], height=count_males)
# plt.bar([i for i in range(7)], height=count_females)
import
numpy
as
np
m
=
[[
i
,
count_males
[
i
]]
for
i
in
range
(
7
)]
f
=
[[
i
,
count_females
[
i
]]
for
i
in
range
(
7
)]
# list1 = [[0,1],[1,2.5],[2,3],[3,5.6]]
# list2 = [[0,2],[2,5],[3,7]]
x1
,
y1
=
zip
(
*
m
)
x2
,
y2
=
zip
(
*
f
)
plt
.
figure
(
figsize
=
(
10
,
5
))
plt
.
bar
(
np
.
array
(
x1
)
-
0.15
,
y1
,
width
=
0.3
,
label
=
'males'
)
plt
.
bar
(
np
.
array
(
x2
)
+
0.15
,
y2
,
width
=
0.3
,
label
=
'females'
)
#setting the xticks. Note x1 and x2 are tuples, thus + is concatenation
# plt.xticks(range(min(x1+x2), max(x1+x2)+1))
plt
.
xticks
([
i
for
i
in
range
(
7
)],
classes
)
plt
.
legend
()
plt
.
show
()
```
%%%% Output: display_data

%% Cell type:markdown id: tags:
# Evaluations Final PPT
%% Cell type:code id: tags:
```
python
from
joblib
import
load
from
config
import
CLASS_GROUP
,
MASKED
,
EVALUATION_SCORES
```
%% Cell type:code id: tags:
```
python
import
numpy
as
np
import
matplotlib.pyplot
as
plt
def
tpr_gender_gap
(
scores
,
class_group
=
'medical'
):
x_males
=
[
scores
[
'count_males'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_males
=
[
scores
[
'tpr_males'
][
i
]
-
scores
[
'tpr_females'
][
i
]
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
x_females
=
[
scores
[
'count_females'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_females
=
[
scores
[
'tpr_females'
][
i
]
-
scores
[
'tpr_males'
][
i
]
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
return
(
x_males
,
y_males
,
x_females
,
y_females
)
def
average_odds_difference
(
scores
,
class_group
=
'medical'
):
x_males
=
[
scores
[
'count_males'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_males
=
[(
scores
[
'fpr_males'
][
i
]
-
scores
[
'fpr_females'
][
i
]
+
scores
[
'tpr_males'
][
i
]
-
scores
[
'tpr_females'
][
i
])
/
2
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
x_females
=
[
scores
[
'count_females'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_females
=
[(
scores
[
'fpr_females'
][
i
]
-
scores
[
'fpr_males'
][
i
]
+
scores
[
'tpr_females'
][
i
]
-
scores
[
'tpr_males'
][
i
])
/
2
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
return
(
x_males
,
y_males
,
x_females
,
y_females
)
def
average_odds_error
(
scores
,
class_group
=
'medical'
):
x_males
=
[
scores
[
'count_males'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_males
=
[
abs
((
scores
[
'fpr_males'
][
i
]
-
scores
[
'fpr_females'
][
i
])
+
abs
(
scores
[
'tpr_males'
][
i
]
-
scores
[
'tpr_females'
][
i
]))
/
2
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
x_females
=
[
scores
[
'count_females'
][
i
]
/
(
scores
[
'count_males'
][
i
]
+
scores
[
'count_females'
][
i
])
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
y_females
=
[
abs
((
scores
[
'fpr_females'
][
i
]
-
scores
[
'fpr_males'
][
i
])
+
abs
(
scores
[
'tpr_females'
][
i
]
-
scores
[
'tpr_males'
][
i
]))
/
2
for
i
in
range
(
len
(
CLASS_GROUP
[
class_group
]))]
return
(
x_males
,
y_males
,
x_females
,
y_females
)
```
%% Cell type:code id: tags:
```
python
def
plot
(
plot_name
,
n
,
plots
,
slim
=-
0.1
,
nlim
=
0.3
,
limits
=
True
,
class_group
=
'medical'
):
fig
,
ax
=
plt
.
subplots
(
1
,
n
,
figsize
=
(
16
,
5
),
sharey
=
True
)
if
limits
:
plt
.
ylim
(
slim
,
nlim
)
smallest
=
{
c
:(
1
,
999
,
999
)
for
c
in
CLASS_GROUP
[
class_group
]}
for
i
,
item
in
enumerate
(
plots
):
scores
=
load
(
EVALUATION_SCORES
[
'svm'
,
item
[
0
],
'medical'
,
item
[
1
],
0.2
,
item
[
2
]]
+
'.joblib'
)
if
plot_name
==
'tgp'
:
x_males
,
y_males
,
x_females
,
y_females
=
tpr_gender_gap
(
scores
)
elif
plot_name
==
'aod'
:
x_males
,
y_males
,
x_females
,
y_females
=
average_odds_difference
(
scores
)
elif
plot_name
==
'aoe'
:
x_males
,
y_males
,
x_females
,
y_females
=
average_odds_error
(
scores
)
ax
[
i
].
scatter
(
x_females
,
y_females
)
ax
[
i
].
set_xlabel
(
"% Female"
)
ax
[
i
].
axhline
(
y
=
0
,
color
=
'r'
,
linestyle
=
'-'
)
# ax[i].set_ylabel("tgp:"+item[0]+" "+item[1])
ax
[
i
].
set_title
(
plot_name
+
" : "
+
item
[
0
]
+
" "
+
item
[
1
]
+
" "
+
item
[
2
])
for
j
,
c
in
enumerate
(
CLASS_GROUP
[
'medical'
]):
if
abs
(
y_females
[
j
])
<
abs
(
smallest
[
c
][
1
]):
smallest
[
c
]
=
(
x_females
[
j
],
y_females
[
j
],
i
)
ax
[
i
].
annotate
(
c
,
(
x_females
[
j
],
y_females
[
j
]))
for
s
in
smallest
:
ax
[
smallest
[
s
][
2
]].
plot
([
smallest
[
s
][
0
]],[
smallest
[
s
][
1
]],
marker
=
'o'
,
markersize
=
8
,
color
=
'red'
)
plt
.
show
()
return
(
smallest
)
```
%% Cell type:code id: tags:
```
python
plots
=
[[
'cv'
,
'balanced'
,
'bio'
],[
'cv'
,
'random'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
2
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'w2v'
,
'balanced'
,
'bio'
],[
'w2v'
,
'random'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
2
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'self_w2v'
,
'balanced'
,
'bio'
],[
'self_w2v'
,
'random'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
2
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'cv'
,
'balanced'
,
'bio'
],[
'w2v'
,
'balanced'
,
'bio'
],[
'self_w2v'
,
'balanced'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
3
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'cv'
,
'balanced'
,
'raw'
],[
'w2v'
,
'balanced'
,
'raw'
],[
'self_w2v'
,
'balanced'
,
'raw'
]]
smallest
=
plot
(
'tgp'
,
3
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'cv'
,
'random'
,
'bio'
],[
'w2v'
,
'random'
,
'bio'
],[
'self_w2v'
,
'random'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
3
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:markdown id: tags:
# bias in data
%% Cell type:markdown id: tags:
shows reduction in TPR gender gap bias when data is masked in a balanced sampling trained with SVM and pretrained Word2vec
%% Cell type:code id: tags:
```
python
plots
=
[[
'w2v'
,
'balanced'
,
'raw'
],[
'w2v'
,
'balanced'
,
'bio'
]]
smallest
=
plot
(
'tgp'
,
2
,
plots
,
limits
=
False
)
```
%%%% Output: display_data

%% Cell type:code id: tags:
```
python
plots
=
[[
'w2v'
,
'random'
,
'raw'
],[
'w2v'
,
'random'
,
'bio'
]]
smallest
=
plot
(
'aoe'
,
2
,
plots
,
limits
=
False
)
```
%%%% Output: display_data
![](data:image/png;base64,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DWjTpg1//OMfgUzAfe6553a53kaNGrFhw4Ya21555RU6dOjAmDFjKCkpYfny5bvsL0mS9KWycSOUllJx7f+GtWshJXj/feJvf4PS0kw7ULduXZ599lnOOOMMpkyZQt++fYHMVXbl5eXMnDmTLVu20L59+12eoKh6IqOgoICKioqcTmjsrE8uywI8+uijXHTRRSxcuJAuXbpQUVGR03L6cjH8fsmde+65lQ+Wqmr16tUMHjx4j9Z13eMr2PTplsrpg/7XN6l/zAmce3ovzjjjDE444QQA7r//fu644w46duzIt7/9baZOnbrL9b7//vt8+OGHdOzYcYcHWN144420b9+ejh07Ur9+fU455RSKioooLCyssb8kSdKXynXXUfHySgo/2f4e2zeA2SteguuuY+LEiRQXF/PBBx/Qr18/brzxRpYsWVLZd9iwYQwZMoQRIzJ3NjZu3JhWrVoxZcoUIHML20cffbTTEo499ljKy8tZuXIlAPfeey89e/bcrk+3bt2YOXMma9euZcuWLUycOJGePXvStWtXZs6cyfvvv09FRQUPP/zwDuvfdsl1r169+O1vf8v69evZuHGjJ0S0A68JUI1atmxZYyiuqKjY6aUkq9dv2mHeocf/A02O/wf+dO2pAGzZsoWCggIee+yxHfrefffd201vzB6JnDNnDmedddZ292uUlZUBcNNNN9VYy+OPP+4lL5IkSbfcskPwBfgWcH/Fp1x09dW0HTCAcePG0b9/fzZv3kxKabsTCEOHDuWf//mfGTJkSOW8e++9lwsuuIB//dd/pW7dupVX9dXk4IMP5q677uLMM8+koqKC4447jtGjR2/Xp0WLFlxzzTX06tWLlBL9+vVjwIABAFxxxRV069aNli1b0q5dOw499NDtlt2yZQtnn302H3zwASklfvrTn9KkSRNOO+00Bg8ezNSpU7npppsqT8ToyytyvZTg81RSUpL29vu+tGv33HMP119/PRFBUVERBQUFNG7cmAULFvDOO+/w29/+lsGDB1NeXk7//v154YUXuPvuu3n00UfZvHkzH374IZMmTWLkyJG8+uqrNGjQgNtuu42ioiKOPGk477+ziooN77Flwxoadz2DRsV9abhuBc1f/g9atGjBkiVL+Mtf/sLAgQNZtWoVmzdv5h//8R8ZNWoUAI899hhXXHEFW7ZsoVmzZtxxxx2U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