Inspiration

It’s no secret that women are underrepresented in film. Not only are there usually fewer female characters than male characters, female narratives are also often reduced to only a woman’s relationship with a man. This is best seen with the Bechdel-Wallace test (more commonly known as “the Bechdel test”), which judges how movies and other works of fiction portray women. In order to pass the Bechdel test, a work must have at least two female characters who talk to each other about something other than a man. Although this is not a very high bar to clear, the sheer volume of movies that do not pass the Bechdel-Wallace test is indicative of a deeper problem.

To better understand this problem, we decided to create an algorithm that would analyze existing examples to predict whether any film inputted would pass the Bechdel-Wallace test or not. In doing so, we hoped to learn more about the factors behind this problem.

What It Does

Our algorithm takes a few key features--a film’s number of male characters, a film’s number of female characters, the year the film came out, and its total domesticated, inflation-adjusted gross revenue--and predicts whether or not the film will pass the Bechdel test. Our algorithm uses weights obtained from a logistic regression model, which was trained on datasets obtained from the Internet.

How We Built It

First, to train our model, we needed data. We looked to two major sources: first, Polygraph’s massive study of films by gender, which generously posted their datasets of movie characters and movies on Github; second, Bechdeltest.com’s database of movies that did and did not pass the Bechdel test. We used Python to organize the data across the many different provided files into one dataset.

Then we used the data to train the model. We fit our data to a logistic regression model, which classified each movie as either “pass” or “did not.” Since this work was done in MATLAB, our final algorithm was then translated into Python to be linked with the front end.

We used HTML/CSS to build the front end site, and connected the back end with Flask.

Challenges We Ran into

Frontend/Backend Challenges

We had some difficulties getting the website to look the way we wanted, as well as connecting the front and back end together, but once we figured it out it got very easy from there.

Machine Learning Challenges

At first, we wanted to implement a more complex machine learning program with multiple hidden layers, forward propagation, and backpropagation. Although things went relatively smoothly at first, we could not get the backpropagation to work properly, and thus had difficulty calculating the gradient accurately. Due to time constraints, we thus decided to switch to our simpler logistic regression model.

Accomplishments We're Proud of

Despite the obstacles we ran into, we are proud that we were able to implement a learning algorithm. This is actually the first time we have implemented any sort of learning algorithm outside of an academic setting, and without data specifically provided for an assignment. Although our algorithm is far from perfect, we are still immensely proud of it.

This was also our first time creating a website, so it was really cool to see everything to get together. We’re all very proud that we made a functioning website.

What We Learned

Technical Knowledge

In terms of technical knowledge, we learned a lot. From our data manipulation, we learned how to open, read, and write into csv files to store and scrape necessary data for our logistic regression model. We reinforced our understanding of how to utilize APIs to best serve our needs; in the case for the Bechdel Test API, we learned to avoid querying the API multiple times at once.

From training the algorithm, we became more fluent in MATLAB, and specifically became more adept at using minimization functions such as fminunc and fmincon. From the building of the front end, we became more familiar with the HTML and CSS, and how to use these tools to bring our vision to life. We successfully connected the front end and the back end using Flask for the very first time.

Bechdel Test Analysis

We also learned a lot from a more sociological point of view. Surprisingly, the ratio of male characters to female characters was not the single largest factor in determining whether or not a film would pass the Bechdel test or not; there were many films with many more female than male characters that still failed the test. Upon analysis, this made sense: a film having many female characters, and even allowing them to talk, is one thing. But it is another thing entirely for a film to actually commit to making its female characters people. As such, the films with many female characters that still failed the test probably failed the third step of the test, which requires two female characters to talk about something other than a man.

Another interesting data point was the fact that many of the films that passed the Bechdel test also had no male characters. This portion was significant enough to require us to add the number of male characters as a factor in the algorithm, separate from the ratio mentioned earlier. From this, the prioritization of male narratives over female narratives becomes obvious, as in this portion, female narratives were only given narrative attention because there were no male narratives to compete with.

We also learned that the Bechdel test is not perfect. Some films we know have strong female characters with their own arcs failed the test, and some films we know to be sexist passed. Instead of being a condemn/do not condemn measure for any individual test, we learned, the Bechdel test is meant primarily to illustrate a larger, problematic trend. The sheer number of films that fail to meet the Bechdel test’s simple criteria is indicative of how female narratives are reduced to a female character’s relationship with a man; however, the Bechdel test cannot definitively confirm any individual film as either sexist or feminist.

What's Next for Bechdel-Wallace Bot

First, we would like to refine our algorithm. First, we would like to collect more data, as it’s highly likely other factors we were unable to collect also influence a film’s chances of passing the Bechdel test. We would also like to include more exception handling for user input of data. One feature we would consider implementing in the future is to offer auto-fill options for the user for movies in which we can find in our databases.

We learned from this project that the Bechdel test cannot definitively measure the sexism of any one film. To better evaluate individual films, then, we would like to expand our project to include other measurements of female representation, such as the Mako Mori test, which evaluates narrative arcs, and Johanson analysis, which considers different categories of representation.

We would also like to eventually include tests for other minorities, such as the Vito Russo test for LGBTQ representation and Naomi Ko’s test for women of color.

Share this project:

Updates