7. Moment07 - Teori

Inspelad genomgång av Moment07 [klicka för att visa]

Inspelad våren 2020

Genomgången är inspelad våren 2020 när vi för första gången körde fjärrundervisning pga Covid-19. Även om Covid-19 nu funnits hos oss i ett drygt år så såg jag ingen anledning att spela in genomgången igen.
Det finns ett kodexempel, avsnitt 7.3.2.1, där jag använder ett API med data angående smittade och döda pga Covid-19, den koden har jag kört en gång till den 1 april 2021 med aktuella data. 19 april 2022 kördes denna koden en gång till.

I denna kurs finns det ett block med teori som vi behöver belysa och vi behöver också diskutera hur programmeringen påverkar samhället både positivt och negativt. En stor del av datoriseringen som sker i samhället hade inte varit möjlig om vi inte kunde programmera men hur vi programmerar kan också ställa till det för oss utifrån perspektiv som genus och ur ett socialt perspektiv.

7.1 Programmeringens roll i samhället

Vi startade kursen genom att prata om vad programmering är och hur det påverkar vår vardag genom att se några filer från Skolverket. Vill du kika på dessa igen så finns dessa i Moment01. Kanske ser du på dessa filmer med andra ögon nu när du har lärt dig att programmera?

7.2 Genus

IT-branschen är idag en mansdominerad bransch på så många olika nivåer att det lätt blir ett endimensionellt synsätt på lösningar och de applikationer som skapas. Det vi är intresserade av när vi diskuterar denna frågan är inte att olika gränssnitt som riktar sig mot olika grupper ser olika ut. Det är naturligt att en hemsida för ett krigsspel och en reklamsite med vidhängade webshop för någon Disneyfilm ser olika ut. Detta utseende får någon annan kurs ta hand om, vi skall fokusera på hur algoritmer skapas och hur de kan bli fel.

Inom många tekniska områden, inte minst datavetenskapen, så är det en ojämn fördelning mellan män och kvinnor. Varför det är på detta sättet kan vi diskutera länge men jag vill belysa problemet med att det blir så ensidigt.

Vi tittar på några exempel där genus, förväntningar eller invanda mönster skapar felaktigheter.

7.2.1 Studie på git-hub

En studie när det gällde skriven kod av kvinnliga och manliga utvecklare gjordes på git-hub. Git-hub är en plattform där utvecklare kan dela kod och också felsöka, granska och godkänna varandras bidrag till den gemensamma kodbasen. Generellt så visade det sig att kvinnliga utvecklares kod i högre grad än den kod som deras manliga kollegor skrev blev accepterad.

När studien gick vidare och det infördes profilinformation som gick att utläsa om det var en kvinna eller man som lade till kod så sjönk andelen accepterad kod från kvinnor med ca 10%. Blev den skapade koden sämre för att det kunde identifieras att den var skriven av en kvinna? Naturligtvis inte.
Gender bias in open source: Pull request acceptance of women versus men.

7.2.2 Könsneutral översättning

Utvecklingen inom datavetenskapen och programmeringen skapar nya möjligheter men också nya problem. Bottarna som vi människor kommunicerar med blir fler och fler och de som kodar dessa måste ibland göra förenklingar och antaganden för att kunna lösa uppgiften. När jag jobbade på Enator, IT-konsultbolag, precis på andra sidan millenieskiftet så kontaktade Eniro oss och ville ha hjälp med en sökalgoritm till deras nya webbsida där de skulle lägga alla telefonkataloger från hela landet i en sökbar databas. Där ville de att alla sökningar som liknade Eriksson på något sätt såsom Ericsson, Ericson, Erikson, Ericzon mfl skulle ta fram alla namn som då liknade det du sökte efter. Alltså om du sökte efter Erixon så skulle du få alla varianter i en lista. Då inser vi alla att denna algoritmen inte är helt enkel.

Vi kikar på en algoritm som ni säkert har använt och det gäller Google Translate. Denna algoritm var fruktansvärt usel i den första versionen då all översättning fick gå via engelska och känslan var verkligen att den översatte ord för ord. Att översätta från svenska till tyska blev direkt plågsamt. Google Translate har blivit allt bättre och bättre då den dessutom är programmerad att få tips av användaren att hjälpa till med översättningen som den sedan lär sig av. Engelska texter översätts allt bättre och bättre. Förr märktes en automatiskt översatt filmtext på första raden, nu går det inte lika snabbt.

Vi kan räkna med att denna trenden med översättning kommer fortsätta att utvecklas men det finns hela tiden nya problem att ta hänsyn till. Vad händer om vi översätter till ett könsneutralt språk. I svenskan så används hen allt mer, själv gillar jag att skriva det i text då det känns som att texten blir mer flytande utan att behöva skriva eleven, personen eller något annat könsneutralt. Men hen finns inte i alla språk och det finns dessutom språk där du inte skriver hon eller han. Turkiska är ett könsneutralt språk som skapar utmaningar för Google Translate. Den som jobbar med den översättningsalgoritmen måste då göra vissa antaganden och då kan det bli fel.

Vi översätter två korta meningar till turkiska.

Bild

Sedan översätter vi det tillbaka till svenska.

Bild

Eftersom turkiska är könsneutralt så behöver algoritmen utgå ifrån någonting för att översätta O till han eller hon och troligtvis så kollar algoritmen i detta fall vilket yrke eller roll som personen har och gör då antagandet att doktorn är en man och barnvakten är en kvinna. I just detta fall så kommer det alltid behöva bli en gissningslek om det är kvinna eller man, men det känns väl inte riktigt som en slump att det blev på just detta sättet. Någonstans blir en fördom, en förväntan, ett antagande som bygger på könsnormer en sanning.

Det är svårt med språk och denna typ av problem kommer inte lösas till 100% men det vore kul om det inte alltid blev som vi misstänkte att det blir.

7.2.3 Lagra data

Nästan alla våra programmerade system bygger på att data lagras och något som lagras väldigt ofta är personinformation. Tänk så många system som är uppbyggda på de två biologiska könen. Tyskland erkänner ett tredje kön vilket innebär att intersexuella personer inte längre behöver identifiera sig som kvinna eller man. Det är ju en ganska radikal förändring för våra IT-system. Den Tyska domstolen som beslutade att erkänna det tredje könet ger också förslaget att helt och hållet ta bort könsbestämningen. Hur påverkar detta våra applikationer?

Facebook har sedan en tid låtit varje nyregistrerad användare själv få välja vilket kön som skall visas upp och här finns också möjligheten att välja en neutral könstillhörighet.

Bild

7.2.4 Visa reklam och information

Ett annat exempel där vårt angivna kön, eller det kön vi uppfattas ha, påverkar vår vardag på nätet är all reklam som vi möts av. Ta t.ex. de reklambudskap som vi får i vårt flöde på facebook, är det inte väldigt många annonser som passar väldigt bra för just mig. För visst är det väl en slump att just den tekniska prylen som jag precis sökte information om just nu finns till ett väldigt bra pris? Naturligtvis är det ingen slump, det styrs av cookies (liten datafil som lagrar information om att du t.ex. har sökt efter en ny spelkontroll av en viss typ, mer om det i andra kurser) men om ingen cookie är lagrad hur skall då facebook välja att ge mig reklam? Vi kan ju utgå ifrån att facebook då placerar köpt reklam som någon algoritm utgår ifrån skall locka mig. Finns det ingen information om en specifik vara eller grupp av varor så kan vi räkna med att reklamen bygger på en förväntan om vad en man från Göteborgsområdet i fyrtioårsåldern kan tänkas vilja ha. Jag har själv inte testat att skapa nya profiler på facebook för att jämföra hur den första reklamen ser ut för en kvinna respektive en man men jag har hört talas om personer som har gjort det för att se hur olika informationen ser ut. Kanske har detta bättrat sig när det nu går att välja en neutral könstillhörighet.

Jag slänger in en diskussionsfråga: Tror du att Google påverkar ett sökresultat beroende på om användaren är en kvinna eller man? Eller vilka tidigare sökningar en person har gjort? Eller vilken information som Google kan läsa ut av dina cookies?

7.3 Säkerhet, hot och möjligheter

Samtidigt som vi blir allt mer digitaliserade så kommer det skapas både möjligheter och hot för de applikationer och/eller data som vi samlar in och presenterar. I detta avsnitt vill jag belysa både problem och möjligheter med digitaliseringen och i vilken riktning vi vill styra den.

7.3.1 Ansiktsigenkänning

Ansiktsigenkänning är något som används allt oftare när artificiell intelligens i viktiga system. Det används både för inloggning/access på fysiska platser och i våra digitala produkter såsom smartphones för att kunna logga in. Den kinesiska polisen har börjat använda smarta glasögon för att snabbt kunna identifiera människor som av någon anledning är flaggade i polisens system.

Kina har också startat ett socialt kreditsystem där du samlar poäng beroende på hur bra, eller dåligt, ditt sociala beteende är. Gör du bra saker så kan du få fördelar i samhället, gör du dåliga saker så kan du få svårt att få ett jobb eller ej få rätt att boka resor med tåg eller flyg. I filmen nedan så berättar reportern om detta systemet.

Social Credit System Coming To China, With Citizens Scored On Behavior | NBC Nightly News

För att dessa system skall kunna litas på så är det viktigt att de stämmer och att analysen som görs är korrekt. Därför är det allvarligt att se hur undersökningar görs där det tydligt visar att män och kvinnor samt ljus- och mörkhyade människor inte känns igen lika bra.

Overall, male subjects were more accurately classified than female subjects replicating previous findings (Ngan et al., 2015), and lighter subjects were more accurately classified than darker individuals. An intersectional breakdown reveals that all classifiers performed worst on darker female subjects.

Det som har undersökts är tre kommersiella mjukvaror för ansiktsigenkänning där mjukvaran får en bild på en person och så skall mjukvaran bestämma personens kön. För män med ljus hy låg felmarginalen under en procent och för mörkhyade kvinnor låg felmarginalen på mellan 21 och 35 procent i de undersökta mjukvarorna.

Hur kan det bli sådan skillnad? kan det vara så enkelt att det är är en övervägande del ljushyade män som har utvecklat mjukvarorna och sedan när de har testat systemet exempelvis testat med bilder på sina arbetskamrater, vänner och bekanta? På det sättet så är det inte omöjligt att anta att mjukvarorna har mycket mer testdata på ljushyade människor och då främst män. Företaget bakom den ena av mjukvarorna lovade att de skulle träna systemet genom att testa ännu fler bilder på de grupper som inte fick så bra resultat i undersökningen.

7.3.2 Utbrottet av Covid-19

Under utbrottet av Covid-19 under vintern och våren 2019-20 så finns det några intressanta it-relaterade tankar som kan vara värda att ta upp.

7.3.2.1 Data över pandemins förlopp

Under pandemins förlopp så har vi bombarderas av tabeller och grafer för hur pandemin utvecklas i olika länder och regioner. Detta används ofta för att peka på hur lyckade/misslyckade olika länders strategier är för att begränsa smittspridningen. Den data som finns kan presenteras på en mängd olika sätt och ofta så väljs det ett specifikt sätt att presentera denna data utifrån vad man vill visa. Då känns det bra att grunddatat som alla analyser bygger på är tillgängligt för alla och för den som är kunnig i programmering kan själv ta fram, analysera och presentera data på det sätt som man själv tycker är lämpligt. Repositoryt https://github.com/pomber/covid19 innehåller bekräftat smittade, döda och friskförklarade för alla jordens länder dag för dag. Själva tidsserien hittar du https://pomber.github.io/covid19/timeseries.json.

Den som gör en analys av data har ett ansvar att denna data presenteras på ett ok sätt för att inte förvanska sanningen. Att visa en analys som stödjer sin tes är naturligt men vad händer om det data som man vill visa inte stödjer tesen, ändrar man då sin tes eller ändrar man vilket data som skall visas? Det är därför det är så viktigt att vara källkritisk även till statistik.

Exempel på databehandling av Covid-19 [klicka för att visa]

Kodexempel: Bygga en lista med flera dictionarys

import requests                     # För att kunna hämta från json
from matplotlib.pylab import plt    # För att kunna rita ut
import datetime                     # För att kunna skriva ut datum

# Adressen till API
api = 'https://pomber.github.io/covid19/timeseries.json'
json_data = requests.get(api).json()        # Läser in JSON-filen

# En lista av dictionarys, varje dictionary är informationen om ett visst land
list_of_countries = [{'Country': 'Sweden', 'Population': 10.2},
                     {'Country': 'Denmark', 'Population': 5.6},
                     {'Country': 'Norway', 'Population': 5.4},
                     {'Country': 'Italy', 'Population': 60.4},
                     {'Country': 'France', 'Population': 67.0},
                     {'Country': 'Germany', 'Population': 83.0},
                     {'Country': 'Spain', 'Population': 46.9},
                     {'Country': 'United Kingdom', 'Population': 66.7},
                     {'Country': 'US', 'Population': 328.2},
                     {'Country': 'Belgium', 'Population': 11.5}
                    ]

for c in list_of_countries:                 # Yttre loop för landet genom att loopa igenom list_of_countries
    deaths = []                             # Skapa/nollställ listan
    number_of_dead = 0                      # Antal döda i landet
    first_date = True                       # Håll koll på datum för första dödsfallet
    for d in json_data.get(c['Country']):   # Loopa igenom och leta efter döda i landet
        if d['deaths'] > 0:                 # Lagra när första dödsfallet inträffade
            if first_date:                  # Lagra datum då första dödsfall inträffade
                c['First_date'] = d['date']
                first_date = False
            deaths.append(d['deaths'] / c['Population'])     # Beräkna dödsfall / miljoner innvånare
            number_of_dead = d['deaths']
    c['Deaths'] = deaths                    # Lagra listan med dödsfall i dictionary
    c['Number_of_dead'] = number_of_dead

# Loopa igenom dictionary för att plotta grafen
for c in list_of_countries:
    plt.plot(c['Deaths'], label=f"{c['Country']}, start: {c['First_date']} ({len(c['Deaths'])-1} dgr). {c['Number_of_dead']} döda.")

# Skriv ut när den är plottad
plt.text(0, 100, f"Plottad: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M')}", fontsize=10)
plt.title("Utveckling av Covid-19 för utvalda länder")          # Diagramrubrik
plt.ylabel("Antal dödsfall / 1 miljon invånare")                # Text för Y-axel
plt.xlabel("Antal dagar sedan första dödfallet")                # Text för X-axel
plt.legend()
plt.show()

Bild: Plot från kodexemplet ovan

Plot av Covid-19

Jag har ställt in så att diagrammet börjar räkna från det datum då det första konstaterade dödsfallet av Covid-19 inträffar. Vissa hävdar att det är bättre att mäta när fler än 1 dödsfall inträffat. Med denna applikationen så går det lätt att ändra analysregler.

Bild: Plot körd igen 1 april 2021

Plot av Covid-19

Bild: Plot körd igen 19 april 2022

Plot av Covid-19

7.3.2.2 Kinas digitaliserade lockdown

Kina är inte bara det första land som drabbades av Covid-19 utan det är också det land som var först med att sätta hela områden i karantän. När de sedan släppte på denna karantän så blev varje person tvungen att installera en app som skulle kontrollera personens hälsostatus, om personen varit i riskområden eller om personen varit nära smittade personer. Det finns naturligtvis ett säkerhetstänk med denna appen men det finns också klara problem angående den personliga integriteten. Så länge din app är grön så anses du frisk och får röra dig fritt. Anser appen att det finns en risk att du är smittad så blir den gul eller röd. Beroende på vilken färg du har fått på din app så skall du självisolera dig eller så sätts du i karantän på order av staten. Är din app gul eller röd så har du heller inte möjlighet att gå in i vissa byggnader eller handla i affärer då din telefon, via AliPay, är det sätt som du kan betala för varor.

Någon möjlighet att testa dig och påvisa att du är frisk finns inte, en gul/röd app kommer bestå tills du anses vara bevisat fri från smitta vilket tar upp till 14 dagar i karantän.

Inlämningsuppgift

Uppgiften är att du skall resonera kring följande frågor;

  1. Hur påverkar programmering din vardag?
  2. Resonera kring problem som kan uppstå inom olika användningsområden ur ett socialt perspektiv inklusive genus, kultur och socioekonomisk bakgrund. Kanske har du några egna exempel som belyser problemet.

Frågan är medvetet ställt väldigt generellt. Om du vill resonera kring genus, vad programmeringen ger för förutsättningar och/eller begränsningar i ditt liv, eller nu under Covid-19, bestämmer du själv.
Bedömning på denna uppgiften sker utifrån kunskapskrav nr 8.

Kunskapskrav

Text

Betyget E

Betyget C

Betyget A

8. Programmeringens roll

Eleven redogör [18] för programmeringens möjligheter och begränsningar samt hur programmering har påverkat och påverkar vardagen.

[18] översiktligt

[18] utförligt

[18] utförligt och nyanserat

Uppgiften skrivs och läggs upp i Classroom.

Inlämningsuppgift m07b - aktivitetsdiagram & pseudokod

Denna uppgiften gäller endast de elever som inte tidigare är godkända på teknikerna Aktivitetsdiagram & pseudokod. Ser du uppgiften i Classroom så skall den lämnas in.

Uppgiften är att utifrån en uppgift ta fram aktivitetsdiagram och pseudokod. När du har planerat uppgiften skall även kod utifrån din lösning skapas.

All info finns i Classrom och det dokument som tillhör uppgiften.